IIFE和javascript中的全局范围
为什么下面的代码导致日志记录为b
,而a
仍然为undefined
?IIFE和javascript中的全局范围
(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;
变量可以以两种方式来定义:
- VAR 1 = 5 //第一
- 一个= 5 // Second
第一种方式,a
是一个局部变量,但是在seco nd方式,它成为一个全局变量。
所以,当你做var a=b=5
,b
是一个全局变量,因此保留价值。
在JavaScript中,如果您在变量之前省略了var关键字,它将被视为全局变量。 所以这里b是一个全局变量,而a只是该函数的一个局部范围。 这就是为什么在访问a时出现错误。
谢谢@samrat,'严格'模式揭示了破解。 –
@ B.D。不用谢。 :) –
没关系,我想通了,因为它不会让我睡觉。
在IIFE内有两项任务,而只有一项声明。
声明var a=b=5;
声明变量a
与var
但只是为其他变量b
分配。 b
实际上从来没有在这里声明,只是分配 - 使其成为全局变量。
因此b
对外界日志声明功能,打印其作为5
价值访问。
换句话说,在“严格”模式,代码如下所示:
(function() {
'use strict';
var a = window.b = 5;
})();
console.log(b);
什么是“拳头方法”和“第二个方法”你指的是? – zerkms