中國循環(huán)經(jīng)濟(jì)網(wǎng)站開發(fā)與設(shè)計(jì)傳媒公司
js變量提升
在JavaScript中,變量提升(Hoisting)是一種特殊的語法行為,它允許變量和函數(shù)聲明在它們實(shí)際出現(xiàn)之前被JavaScript引擎識(shí)別。這意味著,當(dāng)你在代碼的后面部分使用一個(gè)變量或函數(shù)時(shí),JavaScript引擎實(shí)際上已經(jīng)在前面的位置找到了它。
變量提升:
當(dāng)你在一個(gè)作用域內(nèi)聲明一個(gè)變量時(shí),JavaScript引擎會(huì)立即創(chuàng)建一個(gè)變量綁定,并將這個(gè)變量綁定到那個(gè)作用域上。這意味著無論這個(gè)變量在哪里聲明,它都已經(jīng)被提升了。然而,只有變量的聲明會(huì)被提升,賦值操作仍然會(huì)在原地執(zhí)行。
例如:
console.log(foo); // 輸出 "undefined"
var foo = 20;
在這個(gè)例子中,盡管foo
是在console.log(foo);
之后聲明的,但var foo = 20;
實(shí)際上已經(jīng)被移到了這段代碼的開始。所以輸出的結(jié)果是 "undefined",因?yàn)樵趫?zhí)行到console.log(foo);
時(shí),foo
還沒有被賦值。
函數(shù)提升:
函數(shù)提升是指函數(shù)聲明會(huì)被提升到它們所在的作用域的頂部。這意味著你可以在函數(shù)聲明之前調(diào)用這個(gè)函數(shù)。
例如:
foo(); // 輸出 "Hello World!"
function foo() {console.log("Hello World!");
}
在這個(gè)例子中,盡管foo()
是在function foo() {...}
之后被調(diào)用的,但函數(shù)聲明function foo() {...}
實(shí)際上已經(jīng)被移到了這段代碼的開始。所以輸出的結(jié)果是 "Hello World!"。