谁能给我解释一下 hard binding
在 javascript 中是如何工作的?
function foo() {
console.log(this.a);
}
var obj = {
a: 2
};
var bar = function() {
foo.call(obj);
};
bar(); // 2
setTimeout(bar, 100); //
我对这个功能比较感兴趣。
var bar = function() {
foo.call(obj);
};
为什么我们要将 foo.call(obj)
包装在另一个 function
中?我们可以直接使用它吗?
setTimeout(foo.call(obj), 100); // still results in 2.
最佳答案
.call
(和.apply
)方法让您手动设置 this
的值被调用的函数。
所以当你执行 foo.call(obj)
时,foo
中的 this
的值将是 obj
.
至于setTimeout
,您正在做的是立即调用它,而不是等待 100 毫秒。将其更改为 10000
,您会更清楚地看到它没有等待。
这就是为什么需要该功能的原因。您需要将一个函数传递给 setTimeout
,它将在您提供的持续时间后被调用。
还有 .bind()
方法可以创建一个新函数,其 this
值永久绑定(bind)到您提供的第一个参数。所以这实际上是一个硬绑定(bind)示例
setTimeout(foo.bind(obj), 100);
因此在该示例中,返回的函数始终将 obj
设置为 this 值。所以现在 setTimeout
被传递给一个函数,它将在给定的持续时间后被调用。
您还可以将参数绑定(bind)到函数。在第一个参数之后传递给 .bind()
的所有参数都将永久绑定(bind)到返回的函数,因此传递给该函数的任何参数都将放在绑定(bind)的参数之后。
关于javascript - javascript 中的硬绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335128/