在JavaScript中将函数结果赋值给变量

5

我正在学习JavaScript,并希望理解这个行为。

我正在研究以下代码:

function multiNum(x,y){
  return x*y
}
var num = multiNum(3,4);
document.write(num)

我尝试自己打字,以下是我的成果:

function multiNum(x,y){
  return x*y
}
document.write(multiNum(3,4))

我原以为可以直接在document.write()中输入multiNum(3,4)而不需要再创建一个变量。

所以,是否规定必须创建另一个变量并将其放入document.write()中呢?


3
你没有被强制创建一个变量。通常情况下,当变量名称有意义且为避免代码混乱时,使用变量会使得阅读更加容易。在这里,你的示例很简单。但是想象一下有像a(b(c(42, c('x'))))这样的代码。这更难以阅读(哪个右括号对应哪个左括号?),将其分解成具有良好命名的变量会使维护变得更加容易。 - blex
所以这最终是为了使代码更易于阅读和理解!谢谢!! - user13214669
3
有时候,您需要多次使用一个函数的结果。将它存储在一个变量中通常比重复调用函数更好。 - Barmar
4个回答

1

这是一个有趣的问题,为了完全理解它,最好查看 JavaScript表达式。基本上,JavaScript中的赋值看起来像

variable_name = expression

当你创建那个 变量 时,表达式 会被评估。
//so this
number = 3 * 5
//is the same as
number = 15

函数可以通过表达式、字面量(如字符串整数)或变量名进行调用。

// '|' means 'or'
function(expression | literal | variable)

如果你将一个表达式传递给一个函数function(expression),那么这个expression会首先被计算,然后再传递到函数中。
// so
function(3*5)
//is the same as
function(15)

同样的规则也适用于函数调用。如果一个函数在另一个函数内被调用,它会首先被执行,并且其结果将成为外部函数的参数。

让我们看一个例子

function increment(number){
 return number + 1
}
n = 1
document.write(increment(n))

首先,使用参数increment(n)n = 1调用document.write

//so 
increment(n) = increment(1) = 2
//following me? now we can see that
document.write(increment(n)) 
//is the same as
document.write(2)
//!!


希望这有所帮助!
编辑:
回到您的例子。
function multiNum(x,y){
  return x*y
}
var num = multiNum(3,4) // num = 12
//so
document.write(num)
//is the same as
document.write(12)


1
很好的工作,识别出基本的技术问题并按解释器看到的逻辑进行步骤说明,而不仅仅是验证它是否正确。这对于未来的读者有用,可以帮助他们理解JavaScript解释器如何解析表达式。 - Jeremy Caney

1

你给出的两个例子都是正确的,会产生相同的结果。这只是一个风格问题。

如果你想让你的代码更易读,那么像你第一个例子中那样分离它是最好的。

如果你想让你的代码更小,则第二个例子是最好的。

分离事物是最佳实践。


1
你不必创建额外的变量,但大多数情况下这会使代码更易于阅读和理解。他们说你的变量名通常应描述其内容,这样每个人,包括不知道代码的其他人,都可以基本了解正在发生什么。
在你的例子中,没有必要创建额外的变量,因为它是一个非常简单的代码片段。我仍然喜欢创建它们,只是为了保持这样做的节奏。但这是你的选择。

0

你用第二种解决方案的方法很有效率。

通常来说,第一种方法只有在你需要计算multiNum(3,4)的值并且稍后在脚本中使用时才有用。这就是为什么你需要将它存储在一个单独的变量中,这样你就不必再次计算该值了。

如果你确定后面不再需要它,那么你后来做的document.write(multiNum(3,4))是最好的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接