變量提升和函數提升

JS不像C語言,C語言是先聲明后使用,否則會報錯。但JS中,有變量提升現象,可以先使用后聲明。

JS存在變量提升,這個設計其實是低劣的,或者是語言實現時的一個副作用。它允許變量不聲明就可以訪問,或聲明在后使用在前。
但在ES6加入let/const后,變了Hoisting就不存在了。

變量提升

把變量提升到函數top的地方。但要注意僅僅是變量提升,賦值并不提升。

var v = 'Hello World';
(function() {
    alert(v);    // undefined
    var v = 'I love you';
})()

相當于:

var v = 'Hello World';
(function() {
    var v;
    alert(v);
    var v = 'I love you';
})()

所以,才會提示說“undefined”。

(function(){ 
    var a='One'; 
    var b='Two'; 
    var c='Three'; 
})() 

實際上她是這個樣子:

(function(){ 
    var a,b,c; 
    a='One'; 
    b='Two'; 
    c='Three'; 
})() 

這個時候就把變量提升了。

從這里,我們也學習到,我們在寫js code 的時候,需要把變量放在塊級作用域的頂端,比如我在上面所舉的例子:var a,b,c;。防止出現意外。

函數提升

函數提升是把整個函數都提到前面去。

在我們寫js code 的時候,我們有2中寫法,一種是函數表達式,另外一種是函數聲明方式。
我們需要重點注意的是:

  • 只有函數聲明形式才能被提升。
    1、函數聲明形式 【成功】
function myTest(){ 
    foo(); 
    function foo(){ 
      alert("我來自 foo"); 
    } 
} 
myTest(); 

2、函數表達式方式【失敗】

function myTest(){ 
    foo(); 
    var foo =function foo(){ 
      alert("我來自 foo"); 
    } 
} 
myTest(); 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 像變量提升和函數提升這種偏學院派的問題在面試中出現的概率很高,在實際開發中也會影響到編程的效率。 前段時間在網上做...
    時和歲稔閱讀 1,088評論 1 7
  • 在javascript里存在一種叫變量聲明提升的東西。這里來詳細的說一說,到底什么樣的聲明會提升,提升了什么東西。...
    xiaoyoo閱讀 463評論 0 0
  • (注1:如果有問題歡迎留言探討,一起學習!轉載請注明出處,喜歡可以點個贊哦!)(注2:更多內容請查看我的目錄。) ...
    love丁酥酥閱讀 1,589評論 2 3
  • 1. 深入理解 js 的變量提升和函數提升 先了解:js沒有塊級作用域,只有全局作用域,和函數作用域 相同的函數名...
    adminlyrics閱讀 284評論 0 0
  • 上一章|完美新娘(8) 方婷挑來挑去也沒有挑到自己喜歡的婚紗,還抱怨這家店,沒幾件衣服就敢開店。夏雷提議要不要去別...
    石如一閱讀 363評論 0 0