JavaScript的自执行匿名函数中的这个问题是什么?

假设这是一个示例代码段,我们需要告诉该代码段可能的输出并为其提供解释

var name = 'Zakir';
(() => {
   name = 'Rahul';
   return;
   console.log(name);
   function name(){
      let lastName = 'Singh';
   }
})();
console.log(name);

让我们以幼稚的方式逐一解决这个问题

1→'Zakir'存储在变量名中

3→我们进入一个自执行的匿名函数

4→变量名称重新初始化为“ Rahul”

5→遇到return语句,所以我们退出函数

15→将名称变量打印到当前值为“ Rahul”的屏幕上

因此,最终输出将是

Rahul

但是,不幸的是,这是错误的,让我们再次遍历代码以查看出错的地方,这一次牢记了变量和函数的概念。

1→'Zakir'存储在变量名中

3→我们进入一个自执行的匿名函数

当我们进入函数时,函数将进行提升,并且将name()在自执行函数底部定义的函数提升到自执行函数的最顶部,并且在该中间状态下,代码将类似于-

示例

let name = 'Zakir';
(() => {
   let name;
   name = 'Rahul';
   return;
   console.log(name);
   name = function(){
      let lastName = 'Singh';
   }
})();
console.log(name);

请注意,只要将变量/函数提升到其作用域的顶部,就只会对其进行定义和初始化,并会在其实际位置对其进行初始化,而在顶部则是未定义的,但是它存在。

因此,当变量名被重新初始化时,是局部变量名被重新初始化,而不是全局变量,因此,在此之后,我们退出自执行函数,并将全局变量名打印到控制台,该控制台仍然保存着“ Zakir” 。因此,输出将是-

输出结果

Zakir
猜你喜欢