2015-11-08 177 views

回答

5

因为var a=b=5;语句定义只有本地a变量,其实这样解释

var a = (b=5); 

相等于

b = 5; 
var a = 5; 

其分配5到全局b变量,定义了一个局部变量为a

适当的方式来定义2个局部变量而不值重复将是

var b = 5, a = b; 
0

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

  • VAR 1 = 5 //第一
  • 一个= 5 // Second

第一种方式,a是一个局部变量,但是在seco nd方式,它成为一个全局变量。

所以,当你做var a=b=5,b是一个全局变量,因此保留价值。

+0

什么是“拳头方法”和“第二个方法”你指的是? – zerkms

1

在JavaScript中,如果您在变量之前省略了var关键字,它将被视为全局变量。 所以这里b是一个全局变量,而a只是该函数的一个局部范围。 这就是为什么在访问a时出现错误。

+0

谢谢@samrat,'严格'模式揭示了破解。 –

+0

@ B.D。不用谢。 :) –

0

没关系,我想通了,因为它不会让我睡觉。

在IIFE内有两项任务,而只有一项声明。

声明var a=b=5;声明变量avar但只是为其他变量b分配。 b实际上从来没有在这里声明,只是分配 - 使其成为全局变量

因此b对外界日志声明功能,打印其作为5价值访问。

换句话说,在“严格”模式,代码如下所示:

(function() { 
    'use strict'; 
    var a = window.b = 5; 
})(); 

console.log(b);