Javascript 一旦函数绑定了“bind”,它的“this”就不能再修改了?
只是稍微玩玩一下JS,我想知道为什么下面的代码输出的是Javascript 一旦函数绑定了“bind”,它的“this”就不能再修改了?,javascript,function,call,bind,Javascript,Function,Call,Bind,只是稍微玩玩一下JS,我想知道为什么下面的代码输出的是“foo”,而不是“bar”: String.prototype.toLowerCase.bind(“FOO”).call(“BAR”) 据我所知,返回一个函数,该函数将为此返回“FOO”,因此调用.bind(“FOO”)()输出“FOO” 但是,然后用“BAR”为this调用函数,因此应该输出“BAR” 我哪里错了?你是对的。一旦函数绑定了.bind(),它的这个就不能再修改了此被永久“替换”为.bind()的第一个参数 .bind(“F
“foo”
,而不是“bar”
:
String.prototype.toLowerCase.bind(“FOO”).call(“BAR”)
据我所知,返回一个函数,该函数将为此返回“FOO”
,因此调用.bind(“FOO”)()
输出“FOO”
但是,然后用“BAR”
为this
调用函数,因此应该输出“BAR”
我哪里错了?你是对的。一旦函数绑定了.bind()
,它的这个
就不能再修改了此
被永久“替换”为.bind()
的第一个参数
.bind(“FOO”)
返回一个函数,该函数将为此返回的“FOO”
不完全是。它返回一个函数,该函数将的的绑定到小写
。它的工作原理如下:
function bind(func, thisArg) {
return function () {
return func.call(thisArg);
}
}
您可以重新绑定返回函数的this
,调用func
(此处:toLowerCase
)已经“硬编码”为thisArg
(此处:“FOO”
)。String.prototype.toLowerCase.bind(“FOO”)
如果执行String.prototype.toLowerCase.bind(“FOO”)()
或String.prototype.toLowerCase.bind(“FOO”).call(),则返回带有参数“FOO”的函数toLowerCase
。