关于私有作用域的预解释

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

  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
关于私有作用域的预解释_第1张图片
分析图.png

你可能感兴趣的:(关于私有作用域的预解释)