作用域解析和闭包

yushiro 2010-07-22
对作用域的解释太精彩了,还有LZ举例的代码也深有感受, 自己之前就遇到过类似的问题, 搞的很头大。现在终于明白了深层原因。
yushiro 2010-07-22
mixmaster 写道
“函数的一个副本”这个提法确实很模糊,不够准确。

更准确的说法应该是:每次函数被调用时,系统都会创建一个context(上下文)对象,用于存储参数和局部变量。在函数结束时,这个context对象通常会被自动销毁。如果函数内创建了闭包,使得context中某些数据在函数结束后依然被引用,系统会保留context对象,延长其生命期,以使引用持续有效。

我相信你说的“副本”就是指context对象,只是context对象不是函数开始被调用时对当前上下文环境的拷贝,而是系统视情况在函数结束时对当前上下文环境的保留。发生的时间点和实现手段不一样。


我的理解是, JS既然没有多线程的概念, 那这个context对象, 是否有存在多个的必要?系统就一个context,保存所有的数据。
hyj1254 2010-07-23
和多线程没有可比性。它就是每个作用域对应的一个对象,存在多个作用域就肯定会存在多个context.
ricoyu 2010-07-26
引用
它就是每个作用域对应的一个对象,存在多个作用域就肯定会存在多个context

我也觉得是这样子的,从我举的例子上也可以证明这一点,如果仅存在唯一的一份context对象, <a>元素就不能提示出各自不同的序号。
Global site tag (gtag.js) - Google Analytics