为什么我的函数以错误的顺序执行?



我想知道为什么我的程序输出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的末尾缺少分号是导致问题的问题,可以用声明来避免,而不需要用它们来结束。

第三,如果你想调用两个函数,你需要分别调用它们。如果使用逻辑OR,则不会计算第二个表达式,因为第一个表达式总是被计算为真值。

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);

相关内容

  • 没有找到相关文章

最新更新