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

这里同时出现了函数声明提前,和变量的预解析,但是不管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-level
behaveslikeavarbindingthatgetsinitializedtothatfunctioninitialization**"hoists"totheverytopoftheparentfunction,abovevars**
函数声明提前到当前作用域最顶端,在var之上,但还是不懂:最顶端,那不会被后来的var给覆盖么statement:asastatementinachildblock
behaveslikeavarbindingthatgetsinitializedtothatfunction
doesnothoisttothetopoftheparentfunctionexpressed:insideanexpressionboundintheexpressiononly
然后现在,问题变成了:为什么varfoo无论放在functionfoo...前面还是后面,都返回function
functionbar(){
varfoo;
functionfoo(){};
returnfoo;
}
console.log(typeofbar());
千巷猫影
浏览 306回答 2
2回答

眼眸繁星

由于js有声明提前,你的代码等同于下面。functionbar(){varfoo;functionfoo(){};returnfoo;//以下不会被执行foo=10;foo=11;}console.log(typeofbar());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript