2014-10-16 51 views
0

在一本書試圖說明全局/局部變量的作用域是用這個例子來傳達概念:爲什麼我在javascript中的自制isset函數完全不起作用?

test(); 

if (isset(bar)){ 

    alert('bar must be global!'); 

}else{ 

    alert('bar must be local!'); 

} 

function test(){ 

    var foo = 3; 
    bar = 5; 

} 


function isset(varname){ 

    return typeof varname != 'undefined'; 

} 

眼下如果返回警報「酒吧必須是全球性的」,這是有道理的,因爲變量傳到isset()吧,在這種情況下是全球性的。但爲什麼if語句不會返回警報('foo must be local');當你通過讓我們說當你在isset函數中通過foo

+1

因爲沒有申報象徵「福」,當你調用'isset()函數'。如果你從*裏面的「test」函數調用'isset(foo)',它就會被設置。 – Pointy 2014-10-16 14:24:36

+0

因爲你只用'bar'作爲參數調用'isset()'一次。 – Andy 2014-10-16 14:24:50

+0

我知道這在理論上是有道理的。但是不應該'別的'火? – 2014-10-16 14:26:11

回答

1

由於您尚未使用var關鍵字,因此該變量在全局範圍上定義,並且在執行測試功能後仍然存在。這更詳細地解釋了here

2

「bar」在函數test()中沒有被聲明。然後,Javascript假設它是一個全局變量。

爲了確保你不要讓這些那樣的失誤,可能我建議你使用:

"use strict"; 

把該行的文件的開頭。這將避免很多錯誤,因爲這裏介紹:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

它會阻止未申報瓦爾作爲全局變量

相關問題