2017-03-17 111 views
-4

我需要幫助來理解我正在學習的東西。我的一些代碼行設置了一個變量,名稱,它爲用戶保存一個名稱,並在單擊元素時設置。爲什麼在瀏覽器中默認設置變量名?

我發現的問題是即使沒有點擊元素,用戶仍然可以在控制檯中訪問它。

我認爲我的代碼有問題,但我發現它在另一個站點上訪問它是一樣的;例如,訪問facebook上的變量會得到"_e_0MDe"。其他網站產生空字符串,如""

爲什麼會發生這種情況? 謝謝。

+0

「_I嘗試訪問facebook_下的變量名稱」你究竟做了什麼**? – csmckelvey

+3

你的問題有點不清楚。你能提供代碼示例嗎? – christopher

+0

在javascript中,你不必用'var'定義你的變量。只要你分配一個值,它將被定義。 –

回答

4

window.name只是DOM API的一部分。 Facebook必須設置它。

如果聲明中裸腳本標記一個變量,其作爲window

<script> 
    var name = 'foo'; 
    console.log(window.name); // "foo" 
</script> 

部分處理,以防止使用函數來創建一個新的作用域(或使用let

<script> 
    (function() { 
    var name = 'foo'; 
    })(); 
    console.log(window.name); // what ever it was before this function call 
</script> 
+0

哦好吧...請你有這樣的列表嗎? –

+0

似乎最可信的解釋,因爲OP可能使用全局變量。 –

+0

@ jamesOduro什麼? –

0

與許多腳本語言一樣,JavaScript在變量聲明和初始化中可能非常鬆散。這允許快速開發,但也意味着您必須注意scoping

您可能會看到的是全球範圍內的碰撞。默認情況下,瀏覽器具有名爲window的全局對象。這個對象可以在你聲明的任何函數中的任何地方使用。

當不在一個塊與保留字(varletfunctionclassimportconst),可以使用在全球範圍內一個初始化的變量。例如,下面的是等價的:

  • name = 'foo'; 
    window.name = 'foo'; 
    

爲了避免語法錯誤,開發人員通常包括在他們的代碼上一個神奇的一句話:

  • "use strict"; 
    

更多信息可以在John Resig的strict mode網站上找到。

相關問題