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

javascript变量预解析与函数声明提前

javascript变量预解析与函数声明提前

千巷猫影 2019-04-21 20:15:27
这里同时出现了函数声明提前,和变量的预解析,但是不管varfoo=11;放哪里,都返回function(这里表述有误为什么SF中Markdown的~~删除线~~不能用...),是什么原因functionbar(){returnfoo;foo=10;functionfoo(){};varfoo=11;}console.log(typeofbar());//function为什么不是number网上查的资料:http://www.bootcss.com/article/variable-and-function-hoisting-in-javascript/解析器将当前作用域内声明的所有变量和函数都会放到作用域的开始处https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Scope_Cheatsheetfunction:Threeformswithdifferentscopebehavior:(为什么有三种...)declared:asastatementattheparentfunctiontop-levelbehaveslikeavarbindingthatgetsinitializedtothatfunctioninitialization**"hoists"totheverytopoftheparentfunction,abovevars**函数声明提前到当前作用域最顶端,在var之上,但还是不懂:最顶端,那不会被后来的var给覆盖么statement:asastatementinachildblockbehaveslikeavarbindingthatgetsinitializedtothatfunctiondoesnothoisttothetopoftheparentfunctionexpressed:insideanexpressionboundintheexpressiononly然后现在,问题变成了:为什么varfoo无论放在functionfoo...前面还是后面,都返回functionfunctionbar(){varfoo;functionfoo(){};returnfoo;}console.log(typeofbar());
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

由于js有声明提前,你的代码等同于下面。
functionbar(){
varfoo;
functionfoo(){};
returnfoo;
//以下不会被执行
foo=10;
foo=11;
}
console.log(typeofbar());
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 305 浏览
慕课专栏
更多

添加回答

举报

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