【发布时间】:2016-06-22 03:49:28
【问题描述】:
function test(flag){
if (flag) {
return function test1(){console.log(1)}
}else{
return function test1(){console.log(2)}
}
}
test(true)()
test()()
它记录 1 和 2,为什么不加倍 2? 这是怎么回事
我的英文不太好,谢谢
这也适用于 1 和 2
function test(flag){
if (flag) {
function test1(){console.log(1)}
return test1
}else{
function test1(){console.log(2)}
return test1
}
}
test(true)()
test()()
【问题讨论】:
-
那是因为在第一次调用中标志被传递为真,因此真正的块被执行,而在第二次调用中,标志将被传递为未定义,所以假块将被执行
-
第一次调用时,
flag为真,然后执行if条件。第二个flag为null,即为false,则执行else条件。 -
不要这样写代码。
标签: javascript function hoisting