学习JS笔记(第七章-闭包,作用域)

2017-05-03  本文已影响0人  这很重要吗

闭包的概念##

Paste_Image.png

闭包实例##

数据传递更加灵活###

Paste_Image.png

常见错误之循环闭包###

Paste_Image.png

封装变量###

Paste_Image.png

闭包小结##

Paste_Image.png

作用域##

js有三种作用域:全局,函数,eval,js 没有块级作用域

Paste_Image.png

作用域链###

new function()构造的函数访问不到当前函数内的变量

Paste_Image.png

利用函数中作用域封装###

javascript可以用+()放在function前,为函数表达式写法,防止function前置形成函数声明,函数声明后加()会报语法错误

Paste_Image.png

ES3执行上下文##

执行上下文,EC,栈结构,每一个函数都有自己的执行上下文EC(执行环境 execution context),并且每个执行上下文中都有它自己的变量对象VO(Variable object),用于存储执行上下文中的变量 、函数声明 、函数参数,这解释了js如何找到我们定义的函数和变量。

Paste_Image.png

变量对象VO###

变量对象(Variable Object,简称VO),是一个抽象概念中的“对象”。
它用于存储执行上下文中的变量、函数声明、函数参数。
函数中还有一个概念——激活对象(AO),自带参数arguments

Paste_Image.png

执行上下文与变量对象###

Paste_Image.png

全局执行上下文(浏览器)###

Paste_Image.png

函数中的激活对象AO###

对于函数而言,AO和VO是一个对象,函数AO分为两个阶段

  1. 变量初始化阶段
  2. 代码执行阶段

函数变量初始化


函数

全局作用域下的初始化


Paste_Image.png

Vo(变量对象)-函数上下文对象,将按照如下顺序进行填充初始化:
1.首先函数参数(若未传入,初始化该参数值为undefined)
2.然后函数声明(若发生命名冲突,会直接覆盖)
3.最后变量声明(初始化变量值为undefined,若发生命名冲突,会忽略。)

实例:

Paste_Image.png Paste_Image.png

函数表达式不会影响VO,在vo中没有,所以不能前置函数表达式,_e是命名函数表达式的名字

Paste_Image.png

代码执行阶段

代码

实战###

Paste_Image.png

总结##

不同情况下的this的值 构造器中的this

函数属性

函数是对象,所以它也有属性

上一篇 下一篇

猜你喜欢

热点阅读