美文网首页
关于私有作用域的预解释

关于私有作用域的预解释

作者: 阿九是只大胖喵 | 来源:发表于2017-02-26 13:14 被阅读0次

    如何区分私有变量还是全局变量:

    1. 在全局作用域下,预解释的时候,声明的变量是全局变量。
    2. 在"私有作用域中声明的变量"和"函数的形参",都是私有的变量。
      在私有作用域中,我们代码执行的时候,遇到了一个变量,首先需要确定它是否为私有变量,如果是私有变量,那么和外边的没有任何关系;如果不是私有的,则往当前的作用域的上一层作用域进行查找,如果上级中也没有,则继续查找,一直查找到window为止。这就是作用域链
    var num = 10;  // num 是全局变量
    function(num1) {
      console.log(num1); // num1 是私有变量
      var num2 = 12; // num2 是私有变量
    }
    

    当函数执行的时候,其直接目的是让函数体中的代码执行,首先会形成一个新的私有的作用域,然后按照如下的步骤执行。

    1. 如果有形参,先给形参赋值。
    2. 进行私有作用域的预解释。
    3. 私有作用域中的代码从上到下执行。
      函数形成一个私有的作用域,保护了里面的私有变量不受外界的干扰,外面修改不了私有的变量,同样的,私有的也修改不了外界的变量。这种机制称之为"闭包"

    现在分析如下代码:

        console.log(total); // undefined
        var total = 0;
        function fn(num1, num2) {
            console.log(total);   // undefined
            var total = num1 + num2;
            console.log(total);  // 300
        }
        fn(100, 200);
        console.log(total); // 0
    
    分析图.png

    相关文章

      网友评论

          本文标题:关于私有作用域的预解释

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