AngularJS标识符已声明错误(使用`let`语句)

时间:2018-06-08 14:47:01

标签: javascript angularjs ecmascript-6

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

中声明了两个页面
$routeProvider.when('/a', {
  templateUrl: 'a.html'
})
.when('/b', {
  templateUrl: 'b.html'
})

每个页面(a.htmlb.html)都有一个类似的脚本标记

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

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

Uncaught SyntaxError: Identifier 'foo' has already been declared

我知道我可以更改变量名称,但我想知道为什么会这样,因为我的直觉是它不应该。使用Angular的脚本标签我错了吗?这可能是由其他原因造成的吗?感谢

1 个答案:

答案 0 :(得分:2)

下面:

<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>