zoukankan      html  css  js  c++  java
  • let,const全局定义的变量属于全局作用域还是块级作用域?

      <script>
        //const、let定义在最上端的代码全局都可以访问,所以是全局作用域还是块级作用域?
        const a = 1
        let b = 2
        console.log(window.a); //undefined
        console.log(window.b); //undefined
       //显然全局window对象并不包括a,b
       //有意思的一点,const let定义在全局的变量也是属于块级作用域,
       //可以想象全局作用域里有一个包裹着全局的块级作用域:类似这种感觉({a,b.....})
       //(所有的变量都在其中,只不过只有let,const定义的全局变量具有块级作用域,window不能访问;
       //而非let,const定义的全局变量,即使也在这个隐形的块级作用域内,由于这些变量没有块级作用域,属于全局作用域)
      </script>
    

    总结:在全局定义变量时(包括定义函数),var所定义的变量(以及function定义的函数)具有全局作用域,所以定义完毕以后就会添加入全局对象(在浏览器中即window全局对象)。window全局对象中的变量,可以通过window.xxx来访问到。由于const let定义的变量是块级作用域,因此即使是const let全局定义的变量也不能通过window.xxx访问到(报错)。我们可以联想有一个包裹着全局代码的大括号(块级作用域);这样一来,全局定义的const,let在这个最外层的块级作用域中;显然window不能访问;但是没有块级作用域的全局变量即使在这个大括号内也属于全局作用域,window自然可以理所当然的访问到。

  • 相关阅读:
    asterisk 使用 g729 g723
    读书笔记《一线架构师》
    能和LoadRunner匹敌的VS2010/2012Web负载测试
    总结 设计模式,企业应用架构模式,架构模式
    聊聊Memcached的应用
    WPF小试牛刀
    读书笔记《Hadoop开源云计算平台》
    高性能与可扩展
    闲聊下架构、框架,以及架构师...
    自己写框架 实践 (Event Framework)
  • 原文地址:https://www.cnblogs.com/xjt31/p/13990721.html
Copyright © 2011-2022 走看看