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

lax*_*089 0 javascript var iife

最近被问到以下JavaScript代码会导致什么,正确的答案让我困惑:

(function () {
    var a = b = 5;
})();
console.log(b);
Run Code Online (Sandbox Code Playgroud)

我原本以为这会打印undefined但实际打印5.

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

Que*_*tin 5

这个:

var a = b = 5;
Run Code Online (Sandbox Code Playgroud)

相当于:

b = 5;
var a = b;
Run Code Online (Sandbox Code Playgroud)

不要

var b = 5;
var a = b;
Run Code Online (Sandbox Code Playgroud)

它创建b为全局,然后分配bto 的值a.

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

"use strict";

(function () {
    var a = b = 5;
})();
console.log(b);
Run Code Online (Sandbox Code Playgroud)