2017-12-27 454 views
0

我在谷歌Chrome瀏覽器測試這個局部變量:的Javascript爲什麼我可以訪問的功能

function test(){ 
    d = 2; 
} 
function test2(){ 
    test(); 
    document.write(d); 
} 
test2(); 

在功能test變量d應該是當地的,所以我不能在功能test2訪問它,有人可以解釋爲什麼這有用嗎?

編輯:

這是不重複的,因爲我不能在原來的問題,使用的變量,而不VAR使得全球的正確答案找到任何地方,它是隱含提到「隱性globals`

的恐怖
+4

如果這是唯一的d被定義的地方,它不是本地的。你需要'var d = 2; '因爲它是一個局部變量。根據你的定義,這是全球性的。 – Snowmonkey

+0

,因爲應該使用'var' .... – epascarello

+0

@baao這不是重複的,因爲我無法找到我的答案在所謂的重複,請檢查它 – ammcom

回答

5

你從來沒有真正聲明過這個變​​量,所以它不是一個局部變量。相反,這是一個隱含的全球化。

您應該始終使用'use strict';來發生該錯誤。

window.d = 2; 
1

這個變量沒有被宣佈,它會自動像聲明。函數測試將在其本地範圍中查找是否定義了變量d,並且由於未在其中聲明而會失敗。所以如果測試函數聲明瞭變量但是父範圍還沒有聲明變量d,那麼測試函數會詢問它的父範圍。然後,測試函數的父範圍將詢問全局範圍是否已經聲明瞭d並且全局範圍發現沒有任何變量d,因此它將創建一個名爲d的變量並返回該變量。由於變量d由編譯器全局聲明,所以你可以在test2中訪問它。

1

當你寫d = 2那麼你告訴JavaScript編譯器將值2賦給變量d:

相關問題