为了账号安全,请及时绑定邮箱和手机立即绑定

JS的作用域问题

JS的作用域问题

新world 2017-09-06 23:28:16
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,但我不知道为什么?
查看完整描述

1 回答

?
phper_linuxer

TA贡献16条经验 获得超25个赞

这是因为条件式函数声明跟函数表达式的处理方式一样。
因此,条件式函数声明丧失了函数声明提升的特性。

就是说你的代码相当于

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();


结合变量提升和作用域链的知识,我想你应该就明白了...


查看完整回答
1 反对 回复 2017-09-07
  • 1 回答
  • 0 关注
  • 999 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信