美文网首页js笔记
js笔记之作用域

js笔记之作用域

作者: uplyw | 来源:发表于2018-04-27 21:54 被阅读9次
    1. 如何区分全局作用域和私有作用域?
    1. 在全局作用域下声明(预解释的时候)的变量是全局变量
    2. 在私有作用域中声明的变量和函数的形参都是私有变量:
      在私有作用域中,我们代码执行的时候遇到一个变量,首先我们需要确定他是否为私有变量,如果是私有的变量,那么和外面的没有任何关系;如果不是私有的,则往当前作用域的上级作用域进行查找,如果上级作用域也没有则继续查找,一直找到window为止...(作用域链);
    2. 当函数执行的时候(直接目的: 让函数体中的代码执行),首先会形成一个私有作用域,然后按照如下步骤执行:
    1. 如果有形参,先给形参赋值
    2. 进行私有作用域中的预解释
    3. 私有作用域中的代码从上到下执行
    4. ...
    函数形成了一个私有作用域保护了里面的私有变量不受外界干扰(外面修改不了私有的,私有的也修改不了外面的) -> 闭包
    console.log(total);
    var total = 0;
    function fn(num1,num2){
        console.log(total);
        var total = num1 + num2;
        console.log(total);
    }
    fn(100,200)
    console.log(total)
    
    // 输出的结果依次是:
    // undefined
    // undefined
    // 300
    // 0
    
    console.log(total);
    var total = 0;
    function fn(num1,num2){
        console.log(total);
        total = num1 + num2;
        console.log(total);
    }
    fn(100,200)
    console.log(total)
    
    // 输出的结果依次是:
    // undefined
    // 0
    // 300
    // 300
    
    在全局作用域中,带var和不带var的关系?

    区别: 带var的可以预解释,所以在赋值的前面可以执行不会报错; 不带var的是不能进行预解释的,在前面执行会报错

    关系: num1 = 1 -> 相当于给window增加了一个叫num1 的属性名,属性值为 1
    var num = 1 -> 首先它相当于给全局作用域增加了一个全局变量num;但是不仅如此,他也相当于给window增加一个属性名为num,属性值为1

    console.log(num) // undefined
    var num = 1;
    console.log(num) // 1
    
    console.log(num1) // Uncaught ReferenceError: num1 is not defined(报错:num1未定义)
    num1 = 1;
    console.log(num1) // 1
    

    私有作用域中出现的一个变量不是私有的,则往上一级作用域进行查找,上级没有则继续向上查找,一直找到window位置,如果找不到呢?

    1. 我们是要获取值:console.log(total) -> 报错了!
    function fn(){
        console.log(total); // Uncaught ReferenceError: total is not defined(报错:total未定义)
        total = 100;
    }
    fn()
    console.log(total) // 报错后,后面的代码不执行
    
    1. 我们要是设置值:total = 100;相当于给window增加一个属性名total,属性值100
    function fn(){
        total = 100;
    }
    fn()
    console.log(total) // 100
    

    js中如果在不进行任何特殊处理的情况下,上面的代码报错,下面的代码都不在执行了

    相关文章

      网友评论

        本文标题:js笔记之作用域

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