1.函数对象的【scope】属性
局部作用域,内部定义的数据,外部不能访问
全局的对象有:this ,window,docuement ,以及全局对象函数和变量(自己定义的哪些函数和变量 function getName(){} var name="张三")
2.执行期上下文
执行定义的函数就会创建一个内部对象,称为执行器上下文也就是正在执行时的作用域环境。
平常说的上下文:是this的取值指向。
一旦函数执行完成,执行期上下文将被销毁
当执行其上下文时就会创建一个激活对象,新对象,这个激活对象保存了函数中所有的形参,实参,局部变量,this指针等函数执行时函数内部的数据情况。然后将这个执行上下文作用域推送到作用域的顶部。
特别解说
(这里也就说明了当内部变量和全局变量相同时,局部变量就会代替全局变量的值。寻找变量的收会从局部变量开始查找,局部变量没有就全局找,直到找到没有为止,没有就是未定义)
激活对象是一个可变对象,里面的数据随着函数执行时的数据的变化而变化,当函数执行结束之后,执行期上下文将被销毁。也就会销毁作用域,激活对象也同样被销毁。这也就是闭包的存在的必要。这样激活对象就会以另外一种方式存在。
3.闭包
闭包函数对象的作用域和其父函数的作用域时相同的,全局作用域也会被引入到闭包函数中。所以当外部的函数执行完之后,闭包函数还没有开始执行,就可以访问外部函数数据,因为在词法分析中,闭包函数还没有执行,函数内部不知道是否要对其局部变量进行访问和操作,所以只能把当前的局部作用域对象保存起来。当闭包需要的时候,就去作用域中查找。也正因为这种引用,造成了一个副作用。正常执行期上下文被销毁后,函数的激活对象也就会随之销毁。
网友评论