W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
14.1?var
?聲明會被提升至該作用域的頂部,但它們賦值不會提升。let
?和?const
?被賦予了一種稱為「暫時性死區(qū)(Temporal Dead Zones, TDZ)」的概念。這對于了解為什么?type of 不再安全相當重要。
// 我們知道這樣運行不了
// (假設 notDefined 不是全局變量)
function example() {
console.log(notDefined); // => throws a ReferenceError
}
// 由于變量提升的原因,
// 在引用變量后再聲明變量是可以運行的。
// 注:變量的賦值 `true` 不會被提升。
function example() {
console.log(declaredButNotAssigned); // => undefined
var declaredButNotAssigned = true;
}
// 編譯器會把函數(shù)聲明提升到作用域的頂層,
// 這意味著我們的例子可以改寫成這樣:
function example() {
let declaredButNotAssigned;
console.log(declaredButNotAssigned); // => undefined
declaredButNotAssigned = true;
}
// 使用 const 和 let
function example() {
console.log(declaredButNotAssigned); // => throws a ReferenceError
console.log(typeof declaredButNotAssigned); // => throws a ReferenceError
const declaredButNotAssigned = true;
}
14.2?匿名函數(shù)表達式的變量名會被提升,但函數(shù)內容并不會。
function example() {
console.log(anonymous); // => undefined
anonymous(); // => TypeError anonymous is not a function
var anonymous = function() {
console.log('anonymous function expression');
};
}
14.3?命名的函數(shù)表達式的變量名會被提升,但函數(shù)名和函數(shù)函數(shù)內容并不會。
function example() {
console.log(named); // => undefined
named(); // => TypeError named is not a function
superPower(); // => ReferenceError superPower is not defined
var named = function superPower() {
console.log('Flying');
};
}
// the same is true when the function name
// is the same as the variable name.
function example() {
console.log(named); // => undefined
named(); // => TypeError named is not a function
var named = function named() {
console.log('named');
}
}
14.4?函數(shù)聲明的名稱和函數(shù)體都會被提升。
function example() {
superPower(); // => Flying
function superPower() {
console.log('Flying');
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: