JavaScript菜鳥教程

JavaScript 對(duì)象

JavaScript 函數(shù)

JS HTML DOM

JS 瀏覽器BOM

AJAX 菜鳥教程

JavaScript 參考手冊(cè)

JavaScript 提升(Hoisting)

在JavaScript中,無論定義在何處,所有變量和函數(shù)聲明都將移動(dòng)或提升到其當(dāng)前作用域的頂部。這是JavaScript解釋器的默認(rèn)行為,稱為hoisting(提升)。

函數(shù)提升(Hoisting)

使用函數(shù)聲明定義的函數(shù)會(huì)自動(dòng)提升。

這意味著可以在定義它們之前調(diào)用它們。

// 在聲明之前調(diào)用函數(shù)
greet();


function greet() {
  document.getElementById("output").innerHTML = "Hello World";
}
測(cè)試看看?/?

正如您看到的,在定義之前,我們已經(jīng)調(diào)用了greet()函數(shù),但是代碼仍然有效。這是因?yàn)楹瘮?shù)聲明在后臺(tái)自動(dòng)提升到頂部。

提升是JavaScript將聲明移到頂部的默認(rèn)行為。

JavaScript僅提升聲明

JavaScript僅提升聲明,而不提升初始化。如果在使用變量后聲明并初始化了變量,則該值將是不確定的。

document.write(num);  // undefined 
var num;
num = 50;
測(cè)試看看?/?

如果在使用變量后聲明該變量,但事先對(duì)其進(jìn)行了初始化,它將返回該值:

num = 50;
document.write(num);  // 50
var num;
測(cè)試看看?/?

letconst不聲明的變量和常量。

未提升JavaScript初始化

JavaScript僅提升聲明,而不提升初始化。

以下兩個(gè)示例產(chǎn)生不同的結(jié)果:

示例1:
var x = 1;   // 初始化 x
var y = 2;   // 初始化 y
document.write(x + " " + y); // 1 2
測(cè)試看看?/?
示例2:
var x = 1;   // 初始化 x
document.write(x + " " + y); // 1 undefined
var y = 2;   // 初始化 y
測(cè)試看看?/?

示例2中,僅將聲明(var y)而不是初始化(= 2)提升到頂部。

由于提升,已在使用y之前聲明了y,但由于未提升初始化,因此y的值未定義。

上面的示例被隱式理解為:

var x; // 聲明 x
var y; // 聲明 y
// 提升結(jié)束.

x = 1; // 初始化 x
document.write(x + " " + y);  // 1 undefined
y = 2; // 初始化 y
測(cè)試看看?/?

始終在頂部聲明變量

提升(Hoisting)是JavaScript的未知或被忽略的行為。

如果您不懂提升(Hoisting),程序可能包含錯(cuò)誤。

為避免錯(cuò)誤,請(qǐng)始終在每個(gè)作用域的開頭聲明所有變量。

注意:如果未聲明變量,則嚴(yán)格模式下的JavaScript不允許使用變量。

您將"use strict"在下一章中了解更多信息。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清