標籤:
題目如下:請寫出下面代碼2次alert分別輸出什麼結果?
<script type="text/javascript">var a = 1; var a;alert(typeof a); (function () { b = ‘hello world‘; var b; })(); alert( typeof b); </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 = ‘hello world‘; var b;
第二題解析:b=‘hello world‘,程式首先會在函數內部去尋找是否有變數b的聲明,如果有的話,直接賦值為‘hello world‘。但是alert( typeof b); 是在函數外面,輸出的全域變數b,所有是undefined。
接著看如下程式碼片段:
<script type="text/javascript"> name = "aaa"; function test() { alert(typeof name); var name = "bbb"; alert(typeof name); } test();</script>
請寫出結果。
分析可以寫成如下程式碼片段:
myname = "aaa";function test() { alert(typeof myname); //在函數內部尋找是否有myname的聲明,有聲明,但未賦值。所以typeof myname為undefined var myname=123;//賦值操作 alert(typeof myname);//number} test();
但是下面程式碼片段,運行結果是什嗎?
<script type="text/javascript"> alert(typeof name); var name = "hello world"; alert(typeof name);</script>
程式運行結果是:string,string。原因是什麼?
注意:通過和園友的共同討論,有了結果了。關於最後出現string和string的結果,確實是因為Chrome瀏覽器預設給name賦值了name="",所以輸出的結果為string。這裡給大家提醒了一下,在前端開發過程中,我們很多時候都在關注CSS和HTML的在各個瀏覽器中的相容器,但是有時JavaScript在各個瀏覽器中也有相容性問題。
轉載自:liminjun88(包含連結http://www.cnblogs.com/liminjun88/)
JavaScript變數聲明提前