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