代码之家  ›  专栏  ›  技术社区  ›  Burgan

angularjs标识符已声明错误(带有'let'语句)

  •  2
  • Burgan  · 技术社区  · 6 年前

    我对angularjs有个问题,因为当我在两个模板中重用变量名时会出现问题。我的设置的简化版本如下,在 route.js

    $routeProvider.when('/a', {
      templateUrl: 'a.html'
    })
    .when('/b', {
      templateUrl: 'b.html'
    })
    

    每一页( a.html b.html )有一个这样的脚本标记

    <script type="text/javascript">
      let foo = 5;
    </script>
    

    还有一个导航菜单用于在页面之间导航。问题是,当我从一页转到另一页时,我会得到一个错误

    Uncaught SyntaxError: Identifier 'foo' has already been declared

    我知道我可以改变变量名,但我想知道为什么会发生这种情况,因为我的直觉是它不应该发生。使用带角度的脚本标记是错误的吗?这可能是其他原因造成的吗?谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Karim    6 年前

    在这里:

    <script type="text/javascript">
      let foo = 5;
    </script>
    

    您在全局范围内声明变量,当您触发第二个路由时,您正在重新声明已经在同一范围内的同一个变量。

    避免使用脚本标记并使用控制器本地作用域,在那里声明变量,这样就不会有任何冲突。

    function aController (){
      let foo = 5;
    }
    
    function bController (){
      let foo = 5;
    }
    

    或者,如果您想让脚本块将代码包装在一个iife中,以避免干扰全局范围。

    <script type="text/javascript">
      (function(){
         let foo = 5;
      })()
    </script>