代码之家  ›  专栏  ›  技术社区  ›  Sreenathan S A

使用let变量而不是使用全局变量

  •  5
  • Sreenathan S A  · 技术社区  · 7 年前

    let 块范围是有限的吗?我可以在包含所有其他函数的块中使用它,并以与全局变量类似的方式使用它吗?

    {
      var b = 10;
      let c = 20;
      function foo(){
        return c;
      } 
    }
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   T.J. Crowder    7 年前

    是的,你可以,但要注意(见下文)。在你的例子中, b 是全球性的,但是 c 不是。

    请注意 foo "use strict";

    还请注意,并非所有浏览器都正确支持ES2015语义 let 、块中的函数声明等。

    要支持尚未兼容的旧浏览器,可以使用旧方法:作用域函数:

    (function() {
      var b = 10;
      var c = 20;
      function foo(){
        return c;
      } 
    })();
    

    那里 都是局部的,而不是全局的,即使我使用了 var

    当然,支持旧浏览器的另一个选择是使用transpiler,如 Babel

    (严格模式对于其他事情仍然很方便,即使有范围函数,例如去掉 The Horror of Implicit Globals [披露:这是我贫血小博客上的一篇帖子] .)

    在这两种情况下,无论是作用域块还是作用域函数,最终的变量都是有效的全局变量 name 在浏览器的全局范围内,即使你给它分配了一个数字或函数,它始终是一个字符串-因为它是 window.name ,窗口的名称)。