Javascript 一旦函数绑定了“bind”,它的“this”就不能再修改了?

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

只是稍微玩玩一下JS,我想知道为什么下面的代码输出的是
“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