2015-11-08 102 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);