js運行機制的小問題

  下面這段代碼,就是變量提升最好的例子。
  爲什麼說是最好呢?
  首先,它有關變量提升,通俗來說就是顯示使用後定義。
  再者,變量提升不僅有關於變量,函數也會被提升,它還涉及到變量和函數被提升的先後順序。
  現在我會爲大家演示 x=5;var x; 和 var x=5;之間的區別
  首先,我們要知道js中的變量提升。JavaScript 只有聲明的變量會提升,初始化的不會。
這是聲明,不管在你使用前還是後,它在解析時都會被放在window對象下。當檢測到你賦值或使用時,自然而然不會報錯。

var x;

 而下面這個,叫做初始化,它不會被提升。

var x=5;

=====================分割線========================
其次,看下面這一段代碼

        window.onload=function(){

        var x = 5; // 初始化 x
             // 聲明 y
            y = 5;
        elem = document.getElementById("demo"); // 查找元素
        elem.innerHTML = x + " " + typeof y;           // 顯示 x 和 y

           // 設置 y 爲 7
            var y;
            function y(){
                return 7;
            };
        }

 他的輸出結果爲 5 number,也就是說,y在這裏是一個數值型變量。而在他之後聲明的函數被覆蓋了(js沒有重載這一說)
!!!!
 常識,後聲明的函數應該覆蓋先聲明的變量。但是這裏卻不能用這一理論解決。
 我們知道,聲明的函數也會被提升,他的優先級高於變量,所以它又被變量覆蓋。
 小提示:賦值函數不會被提升哦,就算先複製在來一個 var 他也不會被提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章