为什么以下代码导致b
的记录仍为a
{/ 1}}?
undefined
答案 0 :(得分:5)
因为var a=b=5;
语句仅定义了本地a
变量,实际上被解释为
var a = (b=5);
等于
b = 5;
var a = 5;
将5
分配给全局b
变量并定义本地a
变量。
在没有值重复的情况下定义2个局部变量的正确方法是
var b = 5, a = b;
答案 1 :(得分:1)
在JavaScript中,如果在变量之前省略var关键字,它将被视为全局变量。 所以这里 b 是一个全局变量, a 只是该函数范围的本地变量。 这就是您在访问 a 时收到错误的原因。
答案 2 :(得分:0)
变量可以用两种方式定义:
第一种方式,a
是一个局部变量,但第二种方式,它变成一个全局变量。
因此,当您执行var a=b=5
时,b
是一个全局变量,因此保留了价值。
答案 3 :(得分:0)
没关系,我自己想出来因为它不会让我睡觉。
IIFE内有2项任务,而只有1项申报。
语句var a=b=5;
使用a
声明变量var
,但只是为另一个变量b
分配。
b
实际上从未在此处声明,只是分配 - 使其成为全局变量。
因此b
可以在函数外部的日志语句中访问,它将其值打印为5
。
换句话说,在'严格'模式下,代码将如下所示:
(function() {
'use strict';
var a = window.b = 5;
})();
console.log(b);