我需要幫助來理解我正在學習的東西。我的一些代碼行設置了一個變量,名稱,它爲用戶保存一個名稱,並在單擊元素時設置。爲什麼在瀏覽器中默認設置變量名?
我發現的問題是即使沒有點擊元素,用戶仍然可以在控制檯中訪問它。
我認爲我的代碼有問題,但我發現它在另一個站點上訪問它是一樣的;例如,訪問facebook上的變量會得到"_e_0MDe"
。其他網站產生空字符串,如""
。
爲什麼會發生這種情況? 謝謝。
我需要幫助來理解我正在學習的東西。我的一些代碼行設置了一個變量,名稱,它爲用戶保存一個名稱,並在單擊元素時設置。爲什麼在瀏覽器中默認設置變量名?
我發現的問題是即使沒有點擊元素,用戶仍然可以在控制檯中訪問它。
我認爲我的代碼有問題,但我發現它在另一個站點上訪問它是一樣的;例如,訪問facebook上的變量會得到"_e_0MDe"
。其他網站產生空字符串,如""
。
爲什麼會發生這種情況? 謝謝。
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>
哦好吧...請你有這樣的列表嗎? –
似乎最可信的解釋,因爲OP可能使用全局變量。 –
@ jamesOduro什麼? –
與許多腳本語言一樣,JavaScript在變量聲明和初始化中可能非常鬆散。這允許快速開發,但也意味着您必須注意scoping。
您可能會看到的是全球範圍內的碰撞。默認情況下,瀏覽器具有名爲window
的全局對象。這個對象可以在你聲明的任何函數中的任何地方使用。
當不在一個塊與保留字(var
,let
,function
,class
,import
,const
),可以使用在全球範圍內一個初始化的變量。例如,下面的是等價的:
name = 'foo';
window.name = 'foo';
爲了避免語法錯誤,開發人員通常包括在他們的代碼上一個神奇的一句話:
"use strict";
更多信息可以在John Resig的strict mode網站上找到。
「_I嘗試訪問facebook_下的變量名稱」你究竟做了什麼**? – csmckelvey
你的問題有點不清楚。你能提供代碼示例嗎? – christopher
在javascript中,你不必用'var'定義你的變量。只要你分配一個值,它將被定義。 –