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自然可以理所当然的访问到。

  • 相关阅读:
    IoC~MVC3+EF+Autofac实现松耦合的系统架构
    IoC~高效的Autofac
    Autofac 依赖注入框架 使用
    C# socket编程实践——支持广播的简单socket服务器
    简单理解Socket
    利用html 5 websocket做个山寨版web聊天室(手写C#服务器)
    c# 实现WebSocket
    oracle中clob字段的使用
    查找程序加载的动态库的路径
    wordpress在window下完美实现301重定向的方法
  • 原文地址:https://www.cnblogs.com/xjt31/p/13990721.html
Copyright © 2011-2022 走看看