var bar = function () {
console.log(4);
};
function bar() {
console.log(5);
}
bar();//4
var bar = function () {
console.log(4);
};
function bar() {
console.log(5);
}
bar();//4
变量提升,等效代码如下:
var bar; //bar is undefined
function bar() {
console.log(5);
}
bar = function () {
console.log(4);
};
===================
有个地方我说错了,参照楼下的回答,函数声明的执行顺序高于变量声明,所以第一行var bar
是不会有的,不改了,放在这里提醒你们吧
代码:
var bar = function () {
console.log(4);
};
function bar() {
console.log(5);
}
bar();//4
# 引擎渲染:
第一步
var bar ; // 变量提升
function bar() { // 变量提升
console.log(5);
}
第二步
bar = function () { // 再赋值
console.log(4);
};
第三部步
bar(); // 输出 : 4
27 回答13.1k 阅读
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.7k 阅读
4 回答2.3k 阅读✓ 已解决
先反对下上面那个等效代码:
var bar; //bar is undefined
;之所以产生
变量提升
是因为执行上下文
的创建阶段早于执行阶段,而创建阶段里function声明又优先于var声明,此时需要注意:同名的函数会覆盖
,同名的变量只会跳过
,因此等效代码如下:以上,bar is undefined的情况不会出现