我的问题是关于以下示例:
function inner(x){
return x;
}
function outer(fn){
var x = 'I just made a closure!!!'
return fn.bind(this, x)
}
var y = outer(inner)
y()
调用y()
时,由于x
,它是否有bind
的封闭?我很困惑,因为它确实可以访问函数outer
的内部变量,但它仍然在outer
的范围之外声明
答案 0 :(得分:2)
当调用y()时,是否因为绑定而在x上有一个闭包?
不,在函数上调用bind
会返回绑定函数。但是,这个绑定函数可能会关闭函数和参数,但这取决于实现。具有闭包的实现看起来像:
Function.prototype.bind = function(context, ...args) {
const bound = this;
return function(...args2) { // the closure
bound.call(context, ...args, ...args2);
};
};
答案 1 :(得分:1)
当调用y()时,是否因为绑定而在x上有一个闭包?
不完全。
x
的值作为参数传递给bind
。
考虑bind
函数实现的粗略近似:
function bind(this_value, first_argument_value) {
return function () {
// Call the original function with arguments and context
}
}
关闭first_argument_value
,而不是x
。