作用域链

2017-07-21  本文已影响0人  gaoqizhuhui

-如何区分私有变量和全局变量:

1.在全局作用域下声明(预解释的时候)的变量是全局变量
2.在私有作用域中声明的变量函数的形参都是私有变量

**在私有作用域中,我们代码执行的时候遇到了一个变量,首先确定它是否为私有变量。如果是私有变量,那么和外面的没有任何关系;如果不是私有的,则往当前作用域的上级作用域进行查找,若上级也没有,则继续查找,一直找到window为止。若window下也没有,则:
1.获取值:eg,console.log(x) ---->报错了
2.设置值:eg,x=100;----->相当于给window增加了一个属性名x,属性值为100

**

如何查找当前作用域的上一级作用域
看当前函数是在哪个作用域下定义的,那么它的上级作用域就是谁,和函数在哪执行的没有任何关系。eg:

var num=10;
function fn() {
   var num=100;
   return function() {
       console.log(num);
   };
}
var f=fn(); //f相当于return后面的返回函数
f();   //---->100
(function() {
   var num=1000;
   f(); //--->100
}) (); 

-当函数执行时的步骤:

(直接目的是让函数体中代码执行,首先会形成一个新的私有作用域,然后执行以下步骤)
1.如果有形参,先给形参赋值
2.进行私有作用域中的预解释
3.私有作用域中的代码从上到下执行
“闭包”机制:函数形成一个新的私有作用域保护了里面的私有变量不受外界干扰(外面修改不了私有的,私有的也修改不了外面的)

上一篇下一篇

猜你喜欢

热点阅读