gpt4 book ai didi

javascript - 绑定(bind)函数的奇怪行为

转载 作者:搜寻专家 更新时间:2023-11-01 00:37:08 25 4
gpt4 key购买 nike

有人能解释一下这里发生了什么吗?

var dog = {
name: "Dogo"
}

var echo = function() {
console.log(this);
}

dog.echo = echo.bind(this);

echo();
dog.echo();

第一个 echo() 按预期打印出全局对象。但是,第二个打印的空对象 {} 与第一个 echo() 打印的对象不同。为什么?

编辑:对不起!我没有提到代码是由 nodejs 解释器运行的!

谢谢你的帮助。

最佳答案

在 nodejs 模块的主要范围内 this 变量引用 module.exports,默认情况下它等于空对象 {},你可以通过运行这些树线来证明这一点

console.log(this === module.exports);
module.exports.a = "a";
console.log(this);

输出应该是

true
{ a: 'a' }

这就是为什么你在第二次调用中得到空对象的原因


但是在你的模块中的一个函数中,this变量引用了nodejs的global变量,证明它创建了一个如下所示的模块并且运行它

global.bar = "baz";
function foo() {
console.log(this === global);
console.log(global.bar);
}
foo();

输出应该是

true
baz

这就是为什么您在第一次通话中获得正确对象的原因

关于javascript - 绑定(bind)函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47617850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com