美文网首页
变量提前的回忆

变量提前的回忆

作者: 大淀桑浮不起來 | 来源:发表于2016-04-26 21:22 被阅读17次

    大家都知道,在他所属的定义域类,会存在一个变量提前,就是声明这个变量的消息,会被提到本作用于最前面,于是乎就有了下面这种题目;

    var c=2;
    function fn(){
        console.log(a);
        var a=1;
        console.log(a);
        var c=1;
    }
    console.log(c);
    fn();
    

    输出的结果当然是,2,undefined,1;
    为什么呢?

    首先再fn这个房间内,变量a和c一旦被声明,那就如同放了两个写有a和c的气球上去,他会漂浮到自己这个房间的顶层,赋值好比是给这个气球再写上值,console.log来的比a赋值为1时早,所以第二个console.log结果是2,读到后面a才被赋值为1,于是乎最后一个console.log就为1;
    这里可以用声明的变量提前来解释,还有代码是从上到下读的
    那第一个console.log(c) 为什么不是1呢?不是一开始赋值为2,后面又对他重新赋值了么?其实因为fn里面的哪个 c,外面的想拿到函数内的一些变量,除非你return出来,或者用闭包提供,是拿不到的,这里就是定义域的作用,函数fn就好像一个城堡,隔离了内部的变量,所以第一个console.log(c)其实就是找的同一作用域的c,就是第一行代码。
    想想,要不明天回忆一下 简单数据类型 和 引用数据类型 吧,晚安···

    相关文章

      网友评论

          本文标题:变量提前的回忆

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