闭包:因为的浏览器回收机制,function在运行完之后会被清除,让function一直存在的方式被称为闭包
闭包是函数的一种书写方式
作用域:
通常来说一段程序代码中使用的变量和函数并不总是可用的,限定其可\
用性的范围即作用域,作用域的使用提高了程序逻辑的局部性,增强程\
序的可靠性,减少名字冲突。
全局作用域:
最外层函数和最外层函数外定义的变量拥有全局作用域
未定义直接赋值的变量自动变声为拥有全局作用域
所有window对象的属性拥有全局作用域,
局部作用域:
函数内部创建的变量
作用域链: 一个内部属性是作用域,包含了函数被创建的作用域中对象的集合。
JavaScript中, JavaSript里一切都是对象, 包括函数。函数对象和其它对象一样,
拥有可以通过代码访问的属性和系列仅供JavaScript引擎访问的内部属性。其中
一个内部属性是作用域,包含了函数被创建的作用域中对象的集合,称为函数的作用城链,
它决定了哪些数据能被函数访问
当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充\
function add(num1,num2){ var sum = num1 + num2; returm sum; }\
在函数add创建时,它的作用域链中会填入一个全局对象,该全局对象包含了所有全局变量\
函数的作用域链是创建函数的时候创建的
执行上下文:
当执行add函数的时候,JavaScript 会创建一个 Execute context (执行上下文),执行上下文中就包含了
add函数运行期所需要的所有信息。Execute context也有自己的Scope chain,当函数运行时,JavaScript引擎
会首先从用add函数的作用域链来初始化执行上下文的作用域链。
活动对象:
然后JavaScript引擎又会创建-一个 Active Object,这些值按照它们出现在函数中的顺序被复制到运行期上
下文的作用域链中,它们共同组成了一个新的对象--'活动对象(activation object)',这个对象里面包含了函
数运行期的所有局部变量,参数以及this等变量,此对象会被推入作用域链的前端,当运行期上下文被销毁,
活动对象也随之销毁