2013-06-13 46 views
0

雖然我瀏覽了一些JS代碼,但我找到了代碼。沒有參數的JS函數正在工作。怎麼樣?

示例代碼:

arg = "TEST ALERT MESSAGE"; 
MyFunction(arg); 

function MyFunction() 
{ 
alert(arg) 
} 

以上MyFunction的()被給予警告消息,但沒有參數來接收傳入的arugment。

但是當我改變'arg'變量(在函數中,在函數'arg'外),它不起作用。

怎麼可能?

在此先感謝

+0

如果'MyFunction'沒有arg'的'本地版本,它會嘗試在外部範圍內引用一個名爲'arg'的屬性。否則你會得到'未定義'。 – Marty

+0

沒有任何預定義參數的函數仍然可以接受參數,它們是動態的,可以通過'arguments'僞數組訪問。 – elclanrs

回答

1

JavaScript中的變量作用域不符合您的想法。 爲了使該變量「私人」的嘗試:

var arg = "not private"; 
function privateMSG(){ 
var arg = "private"; 
    function alerter(){ 
    alert(arg); 
} 
    alerter(); 
} 

嵌套函數和閉包MDN has a much better explanation部分

+3

其實他們這樣做。但是它們的範圍與它們所定義的範圍是鏈接的。變量查找將從函數的範圍開始,如果它們不能在那裏解析,那麼查找將沿着鏈進行,最終以未定義結束,如果找不到任何地方。 – Jonas

+0

謝謝你們。固定。 – raam86

+0

是javascript還是像這樣的bug?我以爲沒有安全 – Natesan

相關問題