javascript - AngularJS 标识符已声明错误(使用 `let` 语句)
问题描述
我在使用 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
我知道我可以更改变量名,但我想知道为什么会这样,因为我的直觉是不应该这样。在 Angular 中使用脚本标签我错了吗?这可能是由其他原因引起的吗?谢谢
解决方案
这里:
<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>
推荐阅读
- android - 在运行 5.1.1 的 Oppo F1S 中单击 TextInputLayout 崩溃
- javascript - 如何在 javascript 的文本警报中显示单引号和双引号?
- ruby-on-rails - 从 Lets Encrypt 获取 SSL 证书时出现超时错误
- java - BigQuery,如何以编程方式定义类似字段的数组?
- elasticsearch - elasticsearch - score_mode sum 不返回预期结果
- c - 在没有管道和信号量的情况下在子进程中创建未知数量的进程
- javascript - 交易不起作用。超级账本作曲家
- python - django 自定义用户模型给了我懒惰的参考错误
- automation - 在 Android 应用的模拟器屏幕上找不到元素
- javascript - 在未安装的组件上调用 setState