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

luz*_*luz 8 javascript

我想知道为什么我的程序输出I4 output\ I3 outputxef\xbc\x9f

\n

\r\n
\r\n
var a = 4;\nvar i = 0;\nvar i3 = function() {\n  console.log("I3 output")\n  return i = i + 3\n}\nvar i4 = function() {\n  console.log("I4 output")\n  return i = 4\n}\n\n(a > 3) && i3() || (a < 5) && i4();\nconsole.log(i)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

我想要I3 output那时I4 output。为什么这不起作用?

\n

Jer*_*lle 9

这是因为你少了一个分号。

这 :

var i4 = function() {
  console.log("I4 output")
  return i = 4
}

(a > 3)
Run Code Online (Sandbox Code Playgroud)

是这样执行的:

var i4 = function() {
  console.log("I4 output")
  return i = 4
}(a > 3) // <--- You are executing i4, passing it "a > 3" as argument
Run Code Online (Sandbox Code Playgroud)

旁注:Javascript 允许你这样做,但会导致错误;但 Typescript 抱怨道。它说你正在调用一个带有 1 个参数的函数,而它期望的是 0。Typescript 确实是对 JS 的一些改进,并且教会了我很多关于它的知识。

如果添加分号,则函数被定义,但不被执行:

var i4 = function() {
  console.log("I4 output")
  return i = 4
}

(a > 3)
Run Code Online (Sandbox Code Playgroud)