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

分享一道面试题,请指点结果为何是undefined

分享一道面试题,请指点结果为何是undefined

喵喵时光机 2019-05-22 16:37:58
if(!("a"inwindow)){vara=10;}console.log(a);//undefined
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

因为变量提升到作用域顶部
//变量提升
vara;
//此时a为全局变量ainwindow为true
if(!("a"inwindow)){
vara=10;
}
console.log(a);//undefined
                            
查看完整回答
反对 回复 2019-05-22
?
忽然笑

TA贡献1806条经验 获得超5个赞

首先弄明白in运算符,可以在MDN中查看。如果指定的属性在指定的对象或其原型链中,则in运算符返回true。
然后就是js引擎执行js语句机制了,js引擎运行时会执行三步操作,第一步是先检查你的js代码有没有低级的语法错误,第二步是预编译,第三步是根据代码顺序解释一句执行一句。
预编译就是在执行代码会把所有的变量声明和函数声明预先处理。当你写了一句vara=1时,javascript会当成两个操作(变量声明和变量赋值):vara;和a=1;第一句(变量声明)是在预编译中执行的,此时只是声明了a这个变量,没有赋值操作,所以此阶段a的值为undefined。等预编译结束,才开始上面的第三步解释执行js代码。
所以根据执行先后上面的代码可以分解为下面的代码:
//先进行预编译
vara;//此时a的值为undefined
//预编译结束开始解释执行代码
if(!("a"inwindow)){//变量a此时已经存在,所以!("a"inwindow)为false
a=10;//跳过不执行a的值还是undefined
}
console.log(a)//undefined
                            
查看完整回答
反对 回复 2019-05-22
  • 2 回答
  • 0 关注
  • 384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号