IIFE 内声明的 Javascript 链式变量赋值获得全局可见性?

标签 javascript var iife

最近有人问我下面的 JavaScript 代码会产生什么结果,正确的答案让我很困惑:

(function () {
    var a = b = 5;
})();
console.log(b);

我本以为这会打印 undefined 但它实际上打印 5

根据我的理解,IIFE(立即调用函数表达式)中定义的所有变量在其范围之外都不应该可见。这些变量声明的顺序究竟如何使 b 在其范围之外可见,而 a 在其范围之外不可见?

最佳答案

这个:

var a = b = 5;

相当于:

b = 5;
var a = b;

var b = 5;
var a = b;

它将 b 创建为全局变量,然后将 b 的值分配给 a

严格模式下也是禁止的。始终使用严格模式!

"use strict";

(function () {
    var a = b = 5;
})();
console.log(b);

关于IIFE 内声明的 Javascript 链式变量赋值获得全局可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50700527/

相关文章:

javascript - 从 JSON 数组中提取 JSON 对象

javascript - JQuery - 将多个文本输入传递到隐藏字段

javascript - 如何将jquery变量分配给json对象值

javascript - 如何在 View javascript 中访问 playframework 的 Controller 数据?

javascript - Angular Controller 仅在 Mozilla Firefox 上未定义

javascript - 在 Rails 中,我发送一个 var 来查看,但在 js 文件中为 nil

javascript - 在函数中使用 let 而不是 var 的优点

javascript - 为什么我的 var 变得未定义但在前一个函数中设置了?

javascript - 立即调用的 setTimeOut 表达式

javascript - 使用 IIFE 创建一个不是引用的类?