2016-05-16 46 views
0

我明白,當我在某個詞彙環境中定義一個函數時,它決定函數有權訪問的詞法閉包,以及來自外部範圍和原型鏈中的變量。是詞法關閉函數的執行上下文的屬性?

我的問題是當我們使用bindcallapply明確地更改函數的執行上下文時會發生什麼情況。這是如何影響由於詞法關閉而應該在函數中提供的變量以及原型鏈中應該找到的變量的。

我的本能說,前面的閉包被替換了,並且應該有一個新的原型鏈可用,並且根據情景在新的原型鏈中可能找到或者可能找不到變量,但是如果我正在創建新的執行,它會引發問題上下文,因此有一個新的詞法關閉,然後我可以以某種方式插入一些其他變量到這個新創建的詞法關閉?

還有一種方法可以在函數調用之前更改函數的this,但保留其以前的詞法關閉?

+3

'bind','call'和'apply'只改變函數上下文的'this'值。他們不會改變關閉env。所以任何「父母」env。即使使用上述方法,變量仍然可用。 –

+0

@SebastienDaniel請將其添加爲答案,我現在意識到我的錯誤 – sasidhar

+0

答案已經發布,謝謝。 –

回答

1

bindcallapply僅改變功能的this值(即其上下文),而不是它的範圍(即環境)。

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

相關問題