首頁 > web前端 > js教程 > JavaScript中聲明提升的介紹(程式碼範例)

JavaScript中聲明提升的介紹(程式碼範例)

不言
發布: 2019-03-05 14:41:06
轉載
2669 人瀏覽過

這篇文章帶給大家的內容是關於JavaScript中聲明提升的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一、概述​​

JS 中,我們會理所當然地認為程式碼是一句一句地執行的,但並不完全正確。

singer = "周杰伦";
var singer; 
console.log(singer); // 周杰伦

sing();  // 故事的小黄花
function sing() {
   console.log("故事的小黄花");
}
登入後複製

以上第一段程式碼,如果按照正常流程,後面的var singer會重新把值預設為undefined,但結果卻是'周杰倫' ;

以上第二段程式碼,會理解成,先執行,後聲明,就會報錯,但結果卻沒有。

以上程式碼區塊其實是可以改寫成這樣的:

var singer = undefined;
singer = "周杰伦";
console.log(singer); // 周杰伦
function sing() {
   console.log("故事的小黄花");
}
sing();  // 故事的小黄花
登入後複製

這是因為:

JS 定義宣告會在編譯階段進行,賦值和其他運算則是在執行階段進行。

所以,先有聲明,再有賦值和執行,這就是變數和函數的宣告提升。

二、函數宣告優先於變數宣告;

var foo = "bar";
function foo() {
   
}
typeOf(foo);  // string

var foo = "bar";
function foo() {
   
}
typeOf(foo);  // string
登入後複製

無論函數宣告放在變數宣告前,或是後,變數宣告都覆寫了函數宣告。

三、每個域都會進行宣告提升

以下程式碼會輸出 10,是為什麼呢?

var foo = 1;
function bar() {
   if (!foo) {
       var foo = 10;
   }
   alert(foo);
}
bar();
登入後複製

因為:

每個網域都會進行宣告提升。

上面程式碼相當於:

var foo = 1;
function bar() {
   var foo = undefined;
   if (!foo) { // !foo === true
       var foo = 10;
   }
   alert(foo);
}
bar();
登入後複製

四、函數表達式不會宣告提升

首先,什麼是函數表達式?

// 函数声明
function foo() {
   console.log("函数声明");
}

// 函数表达式
var foo = function() {
   console.log("函数表达式");
}
登入後複製

函數表達式,不會宣告提升,所以:

foo();  // Uncaught TypeError: foo is not a function

// 函数表达式
var foo = function() {
   console.log("函数表达式");
}
登入後複製

總結

JavaScript 中存在一種宣告提升的機制,有變數宣告和函數宣告。 JS 引擎會在編譯階段尋找每個作用域的聲明,而賦值和運算則在執行時進行。

函數定義分為函數宣告和函數表達式,其中,函數宣告有宣告提升,函數表達式則沒有。

以上是JavaScript中聲明提升的介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板