JavaScript 自执行匿名函数中这个问题是什么?
假设这里有一段示例代码,我们需要说明这段代码可能的输出并解释原因。
var name = 'Zakir';
(() => {
name = 'Rahul';
return;
console.log(name);
function name(){
let lastName = 'Singh';
}
})();
console.log(name);让我们用一种简单的方法逐行分析这个问题。
1 → ‘Zakir’ 存储在变量 name 中。
3 → 我们进入一个自执行匿名函数。
4 → 变量 name 被重新初始化为 ‘Rahul’。
5 → 遇到 return 语句,所以我们退出函数。
15 → 将 name 变量(当前值为 ‘Rahul’)打印到屏幕。
所以,最终输出将是
Rahul
但是,不幸的是,这是错误的。让我们再次仔细检查代码,这次要记住变量和函数提升的概念。
1 → ‘Zakir’ 存储在变量 name 中。
3 → 我们进入一个自执行匿名函数。
当我们进入函数时,函数提升生效,在自执行函数底部定义的函数 name() 被提升到自执行函数的顶部。在这个中间状态,代码将类似于:
示例
let name = 'Zakir';
(() => {
let name;
name = 'Rahul';
return;
console.log(name);
name = function(){
let lastName = 'Singh';
}
})();
console.log(name);请注意,每当变量/函数被提升到其作用域的顶部时,它只会被定义和初始化,它在其实际位置被初始化,在顶部它是未定义的,但它存在。
因此,当变量 name 被重新初始化时,是局部变量 name 被重新初始化,而不是全局变量。之后,我们从自执行函数返回,并将全局变量 name 打印到控制台,该变量仍然保存 ‘Zakir’。因此,输出将是:
输出
Zakir
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP