JavaScript中的IIFE和全局范围



为什么下面的代码会导致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是一个全局变量,因此保留值。

相关内容

  • 没有找到相关文章