JavaScript学习笔记(二十五)函数(五)闭包
- 闭包指的是那些引用了另一个函数作用域中变量的函数。
- 在调用一个函数时,会为这个函数调用创建一个执行上下文,并创建一个作用域链。然后用arguments和其他命名参数来初始化这个函数的活动对象。外部函数的活动对象是内部函数作用域链上的第二个对像。这个作用域链一直向外串起了所有包含函数的活动对象,直到全局执行上下文才终止。
this对象
- 如果内部函数没有使用箭头函数定义,则this对象会在运行时绑定到执行函数的上下文。
- 在全局函数中调用,则this在非严格模式下等于window,严格模式下等于underfined。
- 函数在被调用时都会自动创建两个特殊变量: this 和arguments。内部函数永远不可能直接访问外部函数的这两个变量。
1 | window.identity = 'The Window'; |
1 | window.identity = 'The Window'; |
- 第一行调用object.getIdentity()是正常调用,会返回”My object”, 因为this.identity就是object.identity。
- 第二行在调用时把object.getIdentity放在了括号里。虽然加了括号之后看起来是对一个函数的引用,但this值并没有变。这是因为按照规范,object.getIdentity和(object.get Identity)是相等的。
- 第三行执行了一次赋值,然后再调用赋值后的结果。因为赋值表达式的值是函数本身。this值不再与任何对象绑定,所以返回的是”The Window”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 姚永坤的小窝!
评论