请给我一些关于JavaScript范围链的示例。 当调用外部函数时,再次定义内部函数。这是否意味着每次调用外部函数(并重新定义内部函数)时,对象都会添加到作用域链中? 非常感谢例子。
答案 0 :(得分:1)
在新词法范围(也称为执行上下文)上建立范围链 - 它与调用栈无直接关系。
但是,对函数声明或函数表达式的评估 - 例如“外部函数”中包含的函数声明或函数表达式 - 创建新的词法范围。也就是说,词法范围(也称为执行上下文)是定义函数的结果,而不是执行它的结果。
无论如何,帖子Identifier Resolution and Closures in the JavaScript Scope Chain是一个非常好的阅读 - 搜索其他人,因为他们是[几乎]无限数量的例子。
..每个函数都有一个关联的执行上下文,其中包含一个变量对象[VO],它由给定本地函数内定义的所有变量,函数和参数组成。
每个执行上下文的范围链属性只是当前上下文的[VO] +所有父执行上下文的[VO]的集合。
(参见RobG的评论 - ECMAScript第5版中“VO”的正确术语是Lexical Environment。)
相关的SO问题
JavaScript inner function scope chain?“函数内部何时被创建?在外部匿名函数的执行时间或解析时间内?”
Scope Chain in Javascript“我正在阅读Javascript中的范围链,但它对我没有任何意义,任何人都可以告诉我什么是范围链以及它如何与图形或其他东西一起工作[容易理解?“