这里输出是1,为什么?
一个函数被多次定义,后面的定义会覆盖前面的定义,
而赋值给f,变量提升会提升到文件前面。顺序相当于1.var f; 2.f=function 3.function f();
所以为什么输出不是2?
<script>
var f=function(){
document.write('1');
};
function f(){
document.write('2');
};
f();
</script>
3 回答
已采纳
nickylau82
TA贡献128条经验 获得超67个赞
你有一点搞错了,var hoist(var悬浮)只出现在变量中
而function f(){
// 函数体
} 这个叫函数声明
var f = function(){//函数体} 这个叫函数表达式
函数声明是在JavaScript一旦进入上下文之后马上执行的。
因此正确的顺序是
执行函数声明
执行函数表达式
调用函数
因此输出的是1
玉林峰
TA贡献14条经验 获得超9个赞
我个人觉得执行顺序应该是这样:
var f (声明提前 f为undefind)
function f(){document.write('2')} (函数声明,声明提前)
执行 var f = function(){document.write('1') ; (给 f 赋值)
调用 f() 所以会输出 1;
添加回答
举报
0/150
提交
取消