首頁 > web前端 > js教程 > 主體

一個JavaScript變數聲明的知識點_基礎知識

WBOY
發布: 2016-05-16 17:18:44
原創
1048 人瀏覽過

上週四吃完午飯,leader發了一道JavaScript的題目給我們做,我們Team裡面有做前端的,有做後台的,也有坐mobile web的,所以大家對題目的理解各自都不一樣,然後在QQ討論組裡面進行討論。發現雖然很基礎,但是透過討論收穫不少,分享出來。當然在有開發經驗的開發者看來,這些都是學習JavaScript最基礎的東西。因為平常都是用jQuery或第三JS元件,所以對JavaScript基礎學習不夠重視。題目如下,問題是:2次alert分別輸出什麼結果?

複製程式碼 程式碼如下:

<script>type="text/javascript" ><BR>    var a = 1;<BR>    var a;<BR>    alert(typeof a); <P>    (function () {<BR>        b = '-----';<BR>         🎜></script>


我的答案是:1.undefined 2.undefined。然後leader要我們再仔細考慮問題答案。我對題目的分析:
1.宣告a並賦值為1,然後用重新宣告a,但是此時沒有賦值,那變數預設值應該是undefined。
2.b變數是在函數裡面是局部變量,alert裡面輸出的是全域變數b,所以為undefiend。
我自己在Chrome裡面運行了一下程式碼,程式碼正確結果是1.number 2.undefined。這裡考察的是JavaScript的變數宣告提前概念。
我們在看另一個例子,例如下面:



複製程式碼 程式碼如下:test(); function test(){
    alert("Hello World!");
}

程式不會報錯,而已執行結果是:Hello World!。原理:電腦在開始執行語句之前,會先尋找所有的function定義,然後儲存相關的function。
第1題:
var a = 1;
var a;

第2行宣告變數a,就相當於在頂部聲明了a,然後第一句是重新宣告a,然後賦值為1。所以typeof a為number
第2題:
b = '-----';
var b;
第二題解析:b='-----',程序首先會去找上下文是否有變數b的聲明,如果有的話,直接賦值為'-----'。但是alert( typeof b); 是在函數外面,輸出的全域變數b,所有是undefined。
請注意:變數的賦值運算並沒有事先。
接著看如下程式碼段:




複製程式碼
程式碼如下: 程式碼如下:

   (typeof name);
}
test();

複製程式碼


程式碼如下:



程式碼如下:



但是下面程式碼段,運行結果是什麼?




複製代碼

代碼如下:程式運作結果是:string, string。這裡就弄暈了,不知道怎麼分析解釋了。顯示上我覺得我理解了變數宣告提前,但是用學到方法分析上面程式碼段,我會得到錯誤的結果。那麼變數的賦值和在函數外部(全域變數)還是函數內部(局部變數)有關係?
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板