JavaScript 中 undefined 與 undeclared 之間的區別是什嗎?

來源:互聯網
上載者:User

我認為這個根本的區別在於,undefined是Js語言類型,而undeclared卻是一種Js語法錯誤吧。
--------------------------------- 解答第一部分---------------------------------------
在Js中,有兩個表示‘空’的值undefined和null,其中比較有用的是 undefined。undefined 是一個值為 undefined 的類型。JavaScript語言也定義了一個全域變數,它的值是 undefined,這個變數也被稱為undefined。 但是這個變數不是一個常量,也不是一個關鍵字。這意味著它的值可以輕易被覆蓋。為了避免可能對 undefined 值的改變,一個常用的技巧是使用一個傳遞到匿名封裝器的額外參數。在調用時,這個參數不會擷取任何值。如下例子:
var undefined = 123;
(function(something, foo, undefined) {
// 局部範圍裡的 undefined 變數重新獲得了 `undefined` 值
})('Hello World', 42);
更好的例子是在早期的jQuery代碼中(1.5版本前的jQuery中),你會發現第一行直接就是function(window, document, undefined)這樣直接調用的。很多人不明白這裡整個未定義的undefined變數有何用,其實這裡的undefined就是這樣來的。
該部分答案參考自 Javascript Garden: bonsaiden.github.com/JavaScri...(寫得很好的Js怪癖教程,建議大家去看看!)
------------------------------解答第二部分---------------------------------
而undeclared則是一種語法錯誤,@孫大同 同學的答案,其實訪問undeclared的變數並非會中斷瀏覽器執行。在瀏覽器運行上下文中,undeclared出來的變數簡單可以認為是沒有這樣 var a這樣定義變數,Js引擎執行的時候,由於無法找到其對應的上下文(scope),會簡單地認為該變數是全域的變數,就是會把該變數定義到window中去!
很多同學在寫for (var i = 0, L = xx.length; i < L; i++) 這樣的語句的時候,忘記寫var是經常性的(包括我......),所以直接導致變數i和L變為全域變數,然後出錯。不過,雖然出錯,但變數i和L是可以訪問滴~~~ 
參考 @zhiyelee 同學的更新,加入到這個答案裡面:需要說明一點的是 變數沒有使用var 顯示聲明,但是在使用前已經賦值,這個值是被隱性聲明未全域變數。
即使是b = “null" 這樣的代碼,是可以使用window.b訪問到,而且不會打斷瀏覽器執行!
具體的證據在Mozilla的MDC社區文檔中,參考連結 developer.mozilla.org/en/JavaSc... 裡面有詳細關於Var關鍵字導致的變數undeclared情況。
------------------------------綜合裝逼一下---------------------------------
綜上來說,Js的動態運行是上面問題根本原因,Js解析器需要關鍵字var來確定變數的scope,而變數的上下文,我個人覺得,幾乎就是Js全部的精髓!什麼this關鍵字,閉包神馬的都是上下文才能確定的!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.