美文网首页
关于带var和不带var声明变量

关于带var和不带var声明变量

作者: YucinChow | 来源:发表于2019-07-23 23:37 被阅读0次

    很多时候我们会发现,使用一个变量即使不带var关键字声明,也并不会报错,如

    function fn1() {
       i = 1;
       console.log(i);
    }
    fn1()
    //输出1
    
    function fn2(){
        var i = 1;
        console.log(i);
    }
    fn2()
    //输出1
    

    当执行这两者时二者都会同时输出‘1’,这使的我们觉得这二者并没有什么不同,但一些书籍则会说明这两者并非完全相同。那到底不同在哪?

    console.log(x);
    x = 0;
    console.log(y);
    var y = 0;
    

    上述结果将会直接报错,事实上当我们声明x=0时,我们是将其声明为global object的属性,在BOM中可以通过window来访问,而当处在globalContext时,则有(global === globalContext(VO)),所以也就是说这两者并不是一样的。

    再回到上面的例子中,在进入globalContext时,其属性(property)VO中,只有y存在,且为undefined。而在代码执行阶段,console.log(x)并没能找到变量x,所以将会报错,程序中断。

    所以如果此时我们希望能够不报错,我们可以这样改

    x = 0;
    console.log(x);
    console.log(y);
    var y = 0;
    

    此时程序将会输出0以及undefined,因为在代码执行阶段,global的属性(property)x将被创建,并赋值为0,所以x能够被找到,程序正常打印,而由于代码执行阶段,打印y在给y赋值之前,所以将会打印undefined。

    相关文章

      网友评论

          本文标题:关于带var和不带var声明变量

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