var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);
代码的输出我预计产出将是“1function”。但是,实际输出是'1未定义'。据我所知,函数声明是悬而未决的,如果声明可以访问函数f。但是为什么它打印出未定义的函数还没有被声明?
var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);
代码的输出我预计产出将是“1function”。但是,实际输出是'1未定义'。据我所知,函数声明是悬而未决的,如果声明可以访问函数f。但是为什么它打印出未定义的函数还没有被声明?
你不能在一个条件内声明一个函数。只要你把函数声明外,if语句之前,你可以在条件中使用它,其结果将是您预期的那样:
var y = 1;
function f(){}
if (f) {
y += typeof f;
}
console.log(y);
编辑:嗯,原来你实际上可以(有点*),但不符合所选的符号。这将工作:
var y = 1, f;
if (f = function(){}) {
y += typeof f;
}
console.log(y);
*为Teemu在评论中指出,这是不是一个真正的函数声明,而是一个匿名函数的引用而被分配给变量f
。
这不是条件中的函数声明,它是一个命名的函数表达式。函数表达式的名称仅在函数内部可用,因此示例中的“f”在“if”块中完全没有定义。如果您尝试记录'y',则会出现错误。 – Teemu
另请参见http://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements –
啊...一个错字,应该是“如果你试图登录'F' ... “ 当然。 – Teemu