JS的作用域问题

var b = 2;

function fun(){

console.log(b);

if(b==2){

function b(){

console.log(111);

}

console.log(222);

}else{

console.log(b);

};

}


fun();

为什么打印出来的是两个undefined  而不是两个2,我调试了一下 看到执行步骤,监视变量b,确实是undefined,但我不知道为什么?

新world
浏览 1000回答 1
1回答

phper_linuxer

这是因为条件式函数声明跟函数表达式的处理方式一样。 因此,条件式函数声明丧失了函数声明提升的特性。 就是说你的代码相当于 var b = 2; function fun(){ console.log(b); if(b==2){ var b = function (){ console.log(111); } console.log(222); }else{ console.log(b); }; } fun(); 结合变量提升和作用域链的知识,我想你应该就明白了...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript