2014-01-26 116 views
-1

它是正確的假設,從local變量省略var
總是覆蓋同名global,如果它也缺少var
另外,是否有任何優點使用var與創作許可證。var總是覆蓋全局變量嗎?

所以這是一個參照系,這裏是我從我的a previous post創建謎語發現

Riddle #3

  • 省略從a = 5var覆蓋其global對方
  • b保持localglobal
  • alert()之間偏振光在底部返回5 * 5 + 4 + 15
  • 4是localb。圖15是globalb,在線25上

Riddle #2聲明,

  • 省略從b = 4var覆蓋其global對方
  • a保持localglobal
  • alert()在之間偏振底部返回5 * 3 + 4 + 4 -
  • 5是locala。圖3是globala,宣佈對線11

Riddle #1

  • 省略來自兩個local變量var覆蓋所有global同行
  • localglobal變量之間沒有區別。
  • alert()底部返回5分* 5分+ 4分+ 4分
  • 只有function內聲明的變量被認爲
+6

他們被稱爲小提琴,而不是謎語;) – jovan

+1

你問或說? –

+1

請在您的問題中加入相關的代碼片段,而不只是引用jsfiddles。 – Alnitak

回答

-2

local範圍不覆蓋global範圍,直到該函數被調用。

For Example:

a = 3; 
b = 2; 

function line(x) { 
    a = 5; 
    b = 4; 

    return a*x + b; 
} 

// returns 19 by referencing "global a = 3" 
alert(line(a)); 

b = line(a) - b; 

// returns 25 by referencing "local a = 5" 
alert(b); 

省略var無視global變量(名稱相同的)一旦function line(x)被調用。

+0

這是爲什麼被低估?這是不是真的? – Wilhelm

0

局部變量和形式函數的參數,將總是覆蓋全局(或其他在更高範圍內聲明的變量)。但是,除了函數調用的持續時間外,這些局部變量實際上並不存在。

看到這一點,更換任何全球變量ab其大寫當量(留下任何地方重新聲明或小寫及其應用),你會發現你的代碼的工作相同。

+0

謝謝,我想了很多。我對'爲什麼'更感興趣,但當我回應@jovan時,我意識到了答案。再次感謝。 – Wilhelm