全局作用域下带var和不带var的区别

在全局作用域中,带var和不带var的关系
区别:带var是可以进行预解释,所以在赋值的前面执行不会报错;不带var的是不能进行预解释的,在前面执行会报错(ReferenceError)。

    console.log(num); // -> undefined
    var num = 12;

    console.log(num2); // ReferenceError: num2 is not defined
    num2 = 12;

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

    var num = 12;
    console.log(num); // 12
    num2 = 12;
    console.log(num2); // 12 -> window.num2 = 12

私有作用域中出现的一个变量不是私有的,则往上级作用域进行查找,上级没有,则继续向上查找,一直找到window为止,如果window下也没有?
第一种情况:我们是获取值:console.log(total); -> 报错了,ReferenceError。

    function fn() {
        console.log(total); // ReferenceError
        total = 100;
    }
    fn();
    console.log(total); // 100

第二种情况:total = 100; -> 相当于给window增加了一个属性名total,属性值是100

    function fn() {
        // console.log(total); // ReferenceError
        total = 100;
    }
    fn();
    console.log(total); // 100

JavaScript中如果在没有进行任何特殊处理的情况下,上面一行代码报错,下面的代码都不再执行了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在ES6之前,变量使用var声明,会存在变量的预解析(函数也有预解析),我相信很多同学在刚开始学JavaScrip...
    iceman_dev阅读 8,676评论 5 34
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 1,703评论 0 6
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 1,647评论 0 2
  • 在开始之前先写一下js中的数据类型. 基本数据类型 number, boolen ,string ,null, u...
    Rapheal阅读 872评论 0 0
  • 文丨弘丹 公众号丨笔耕不辍(ID:wewriter) 现在有越来越多的人开始写文章,也有越来越多的人开通了自己的微...
    b09447f6a28d阅读 28,232评论 3 33