美文网首页
作用域链

作用域链

作者: gaoqizhuhui | 来源:发表于2017-07-21 15:43 被阅读0次

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

    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.私有作用域中的代码从上到下执行
    “闭包”机制:函数形成一个新的私有作用域保护了里面的私有变量不受外界干扰(外面修改不了私有的,私有的也修改不了外面的)

    相关文章

      网友评论

          本文标题:作用域链

          本文链接:https://www.haomeiwen.com/subject/prjekxtx.html