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()()
答案 0 :(得分:1)
此行中的功能:
return function test1(){console.log(2)}
不是函数声明。它是命名函数表达式,因为它是语句的一部分。
不会悬挂功能表达式。只提升函数声明,如下所示:
function test(){
return test1;
function test1() { console.log(1); }
function test1() { console.log(2); }
}
test()();

编辑:关于事后添加的问题,条件表达式中的函数声明具有未定义的行为,您可以根据JavaScript引擎看到不同的结果。 if-else
语句中的函数可能不会被提升到作用域的顶部,也不应该将函数声明放在条件表达式中。 More about this
答案 1 :(得分:0)