我想知道为什么我的程序输出I4 output
然后I3 output
?
var a = 4;
var i = 0;
var i3 = function() {
console.log("I3 output")
return i = i + 3
}
var i4 = function() {
console.log("I4 output")
return i = 4
}
(a > 3) && i3() || (a < 5) && i4();
console.log(i)
我想要I3 output
然后是I4 output
。为什么这行不通呢?
这是因为你少了一个分号。
:
var i4 = function() {
console.log("I4 output")
return i = 4
}
(a > 3)
像这样执行:
var i4 = function() {
console.log("I4 output")
return i = 4
}(a > 3) // <--- You are executing i4, passing it "a > 3" as argument
旁注:Javascript允许你这样做,这会导致bug;但是Typescript抱怨道。它说你正在调用一个参数为1的函数,而它期望的是0。Typescript确实是JS的一些改进,并且教会了我很多。
如果添加分号,则函数被定义,但不执行:
var a = 4;
var i = 0;
var i3 = function() {
console.log("I3 output")
return i = i + 3
};
var i4 = function() {
console.log("I4 output")
return i = 4
}; // <-- Add semicolon
(a > 3) && i3() || (a < 5) && i4();
console.log(i)
首先,我建议您开始使用分号。ASI(自动分号插入)是一个错误纠正过程,如果你不这样做,你会发现这些类型的错误悄悄出现。
第二,更进一步,也许可以考虑函数声明而不是函数表达式。再一次,你在i4
的末尾缺少分号是导致问题的问题,可以用声明来避免,而不需要用它们来结束。
var a = 4;
var i = 0;
function i3() {
console.log('I3 output');
return i = i + 3;
}
function i4() {
console.log('I4 output');
return i = 4;
}
(a > 3) && i3();
(a < 5) && i4();
console.log(i);