IIFE和全球范围的JavaScript

时间:2015-11-08 05:58:02

标签: javascript global-variables iife

为什么以下代码导致b的记录仍为a {/ 1}}?

undefined

4 个答案:

答案 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)

变量可以用两种方式定义:

  • var a = 5 // first
  • a = 5 //秒

第一种方式,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);