2016-05-16 30 views
0

我明白,当我在某个词汇环境中定义一个函数时,它决定函数有权访问的词法闭包,以及来自外部范围和原型链中的变量。是词法关闭函数的执行上下文的属性?

我的问题是当我们使用bindcallapply明确地更改函数的执行上下文时会发生什么情况。这是如何影响由于词法关闭而应该在函数中提供的变量以及原型链中应该找到的变量的。

我的本能说,前面的闭包被替换了,并且应该有一个新的原型链可用,并且根据情景在新的原型链中可能找到或者可能找不到变量,但是如果我正在创建新的执行,它会引发问题上下文,因此有一个新的词法关闭,然后我可以以某种方式插入一些其他变量到这个新创建的词法关闭?

还有一种方法可以在函数调用之前更改函数的this,但保留其以前的词法关闭?

+3

'bind','call'和'apply'只改变函数上下文的'this'值。他们不会改变关闭env。所以任何“父母”env。即使使用上述方法,变量仍然可用。 –

+0

@SebastienDaniel请将其添加为答案,我现在意识到我的错误 – sasidhar

+0

答案已经发布,谢谢。 –

回答

1

bindcallapply仅改变功能的this值(即其上下文),而不是它的范围(即环境)。

所以任何父母 env。即使使用上述方法,变量仍然可用。只有this将被更改。

相关问题