WEB开发网
开发学院网页设计JavaScript Javascript 闭包 阅读

Javascript 闭包

 2010-09-14 13:29:59 来源:WEB开发网   
核心提示: 根据声明的局部变量创建的可变对象的属性在变量实例化过程会被赋予 undefined 值,在执行函数体内的代码、并计算相应的赋值表达式之前不会对局部变量执行真正的实例化,Javascript 闭包(7), 事实上,拥有 arguments 属性的活动对象和拥有与函数局部变量对应的命名属性的可

根据声明的局部变量创建的可变对象的属性在变量实例化过程会被赋予 undefined 值。在执行函数体内的代码、并计算相应的赋值表达式之前不会对局部变量执行真正的实例化。

事实上,拥有 arguments 属性的活动对象和拥有与函数局部变量对应的命名属性的可变对象是同一个对象。因此,可以将标识符 arguments 作为函数的局部变量来看待。

回到顶部

最后,在this可以被使用之前,还必须先对其赋值。如果赋的值是一个对象的引用,则 this.m 访问的便是该对象上的 m。如果(内部)赋的值是 null,则this就指向全局对象。 (此段由 pangba 刘未鹏 翻译)

(原文备考:Finally a value is assigned for use with the this keyword. If the value assigned refers to an object then property accessors prefixed with the this keyword reference properties of that object. If the value assigned (internally) is null then the this keyword will refer to the global object. )

创建全局执行环境的过程会稍有不同,因为它没有参数,所以不需要通过定义的活动对象来引用这些参数。但全局执行环境也需要一个作用域,而它的作用域链实际上只由一个对象--全局对象--组成。全局执行环境也会有变量实例化的过程,它的内部函数就是涉及大部分 JavaScript 代码的、常规的顶级函数声明。而且,在变量实例化过程中全局对象就是可变对象,这就是为什么全局性声明的函数是全局对象属性的原因。全局性声明的变量同样如此。

全局执行环境也会使用 this 对象来引用全局对象。

作用域链与 [[scope]]

调用函数时创建的执行环境会包含一个作用域链,这个作用域链是通过将该执行环境的活动(可变)对象添加到保存于所调用函数对象的 [[scope]] 属性中的作用域链前端而构成的。所以,理解函数对象内部的 [[scope]] 属性的定义过程至关重要。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:Javascript 闭包

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接