先有蛋(聲明)拧粪,后有雞(賦值)
/*一*/
a = 2;
var a;
console.log(a) // 2
//實(shí)際情況
var a; // 代表代碼 執(zhí)行前 編譯 過程中的 變量聲明
a = 2铐懊;// 代表 代碼執(zhí)行時(shí)的 賦值聲明
console.log(a) // 2
/* 二 */
console.log(a) // undefined
var a = 2;
//實(shí)際情況
var a灶搜;// 編譯過程 變量提升
console.log(a)
a = 2; // 執(zhí)行過程 的代碼祟蚀,原地等候
變量聲明
屬于 編譯 過程,賦值聲明
屬于 執(zhí)行 過程割卖,編譯 在 執(zhí)行 前前酿。
foo();
function foo(){
console.log( a ); // undefined
var a = 2;
}
// 實(shí)際情況
function foo(){
var a;
console.log( a );
a = 2;
}
foo()
變量提升 只會(huì)提升至 當(dāng)前作用域,而不會(huì)提升至最外層(全局作用域)
函數(shù)優(yōu)先
foo(); // 1
var foo;
function foo() {
console.log( 1 );
}
foo = function(){
console.log( 2 );
}
// 實(shí)際情況
function foo (){
console.log( 1 );
}
var foo;
foo(); // 1
foo = function(){
console.log( 2 );
}
foo函數(shù)聲明
比foo變量聲明
早
// 同類提升會(huì)被覆蓋
foo(); // 3
function foo() {
console.log( 1 );
}
function foo() {
console.log( 2 );
}
function foo() {
console.log( 3 );
}
后面的函數(shù)聲明 會(huì)覆蓋掉 前面的函數(shù)聲明