javascript - 为什么控制台日志在 IIFE 中起作用?
问题描述
var a = 1;
(function a () {
a = 2;
console.log("a:", a);
})();
显然,a 作为 IIFE(立即调用的函数表达式),函数名称将覆盖全局变量 a,这是可以理解的,但是......为什么不在函数本身内将 a 重新分配给数字 2?
function a() {
a = 1;
console.log("a:", a);
};
function a() {
a = 2;
console.log("a:", a);
};
a();
为什么上面的代码表现不同?
解决方案
在命名的 IIFE 中,函数的名称是一个隐含的常量值。
默认情况下重新分配它不会覆盖它也不会抛出错误,但在严格模式下,你可以看到它实际上是一个常量并且会抛出一个错误:
var a = 1;
(function a () {
"use strict";
a = 2; // throws error: Assignment to constant variable
console.log("a:", a);
})();
推荐阅读
- javascript - 如何在 CFML [coldfusion] 中为 FORGOTTEN PASSWORD 字段提供电子邮件功能
- html - 我可以在脚本 src 属性中使用双版本键来避免浏览器缓存吗
- oracle - 如何在没有控制台的情况下在 WebLogic 服务器中更改 Stuck Thread Max Time 的值
- angular - 角度编译器和核心版本有什么区别?
- ios - 如果使用 (indexPath.item % n == 0) 显示单元格,则 UICollectionView 不会创建新单元格。它不会为数字的倍数创建新单元格
- python - python中的重复导入路径模式
- json - 如何在将 csv 文件转换为 json 格式时根据某些条件检查特定字段值
- generics - 在 kotlin 中,测试泛型类型的值是否实现接口,然后将其用作该接口的正确方法是什么?
- amazon-web-services - S3 网站可以访问 API Gateway 私有端点吗?
- python - 无法编码对象:
pymongo