我知道,当我在某些词法环境中定义一个函数时,它决定了该函数可以访问的词法闭包以及来自外部作用域和原型(prototype)链中的变量。
我的问题是,当我们使用 bind
显式更改函数的执行上下文时会发生什么或call
或apply
。这如何影响由于词法闭包而应该在函数中可用的变量以及应该在原型(prototype)链中找到的变量。
我的直觉告诉我,之前的闭包已被替换,并且新的原型(prototype)链应该可用,并且根据场景,在新的原型(prototype)链中可能会或可能不会找到变量,但是如果我正在创建一个新的执行上下文,它就会引出一个问题,从而有一个新的词法闭包,那么我可以以某种方式将一些其他变量插入到这个新创建的词法闭包中吗?
还有没有办法改变 this
在调用函数之前保留其先前的词法闭包?
最佳答案
bind
、call
和 apply
仅更改函数的 this
值(即其上下文),而不是其范围(即环境)。
所以任何父环境。即使使用上述方法,变量仍然可用。只有this
会被改变。
关于javascript - 词法闭包是函数执行上下文的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256441/