关于JavaScript中变量提升的细节

本文深入探讨JavaScript中的函数声明和变量声明提升机制,解释为何函数声明优先于变量声明被提升,以及这种机制如何影响代码的执行顺序。通过具体代码示例,展示了函数声明覆盖变量声明的过程,揭示了JavaScript引擎解析代码的内部逻辑。
摘要由CSDN通过智能技术生成

函数声明和变量声明都会被提升,但是一个值得注意的细节(这个细节可以出现在有多个
“重复”声明的代码中)是函数会首先被提升,然后才是变量

foo(); // 1 var foo;
function foo() { 
	console.log( 1 );
}
foo = function() { 
	console.log( 2 );
};

会输出 1 而不是 2 !这个代码片段会被引擎理解为如下形式:

function foo() { 
	console.log( 1 );
} foo(); // 1
foo = function() { 
	console.log( 2 );
};

注意,var foo 尽管出现在 function foo()… 的声明之前,但它是重复的声明(因此被忽 略了),因为函数声明会被提升到普通变量之前。尽管重复的 var 声明会被忽略掉,但出现在后面的函数声明还是可以覆盖前面的。 foo(); // 3

function foo() { 
	console.log( 1 );
}
var foo = function() { 
	console.log( 2 );
};
function foo() { 
	console.log( 3 );
}
foo(); // "b"
var a = true; 
if (a) {
	function foo() { 
		console.log("a"); }
	}
else { 
	function foo() { 
		console.log("b"); 
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值