【问题标题】:How are return values saved?返回值如何保存?
【发布时间】:2013-03-10 20:17:55
【问题描述】:

方法/函数的调用语句是否保持其返回值类似于变量名称保持值的方式?

例如:

function Jump(height) {
    return height * 2;
}
Jump(3);       //Is the call statement 'Jump(3)' equal the return value of 6 similar to

var x = 3;  //how the variable 'x' is equal to the value of 3?

编辑:我给变量和函数命名相同的名字给了我错误的印象。我纯粹是使用该变量作为比较来了解如何保存返回值。下次我会更好地措辞/组织我的问题。

【问题讨论】:

  • 我想你在找var myJump = Jump(3); // myJump is now 6
  • @corsiKa 我认为这是 answer OP 需要
  • 返回值不会存储在任何地方,除非您将其实际分配给变量,如上面的注释中所示。
  • 让变量和函数同名可能不是一个好主意;)

标签: javascript function return


【解决方案1】:

函数和变量共享同一个命名空间。您定义了函数Jump,然后调用了它(但实际上并没有分配函数的结果(返回的内容)),所以它返回了 6 但您实际上并没有将它存储在任何地方。然后你通过将它重新定义为具有相同名称的变量来覆盖你的函数,并为其分配 3 的值

【讨论】:

  • 如果我不手动将函数的返回值存储在变量中,返回值如何用作另一个函数的参数?即运行(跳转(3));返回值是否存储在“幕后”?
  • 这样做没问题,因为您将值传递给run()。然后该值将存储在第一个 arg 内部运行中,例如:function run(arg1) { alert('arg1); } 在该示例中,arg1 现在具有该值并将其存储在那里(但仅在 run 函数的执行和范围期间)。
  • 所以调用函数类似于数学计算。即 5 * 4 = 20 其中 20 是它的返回值。如果我们想将该乘积乘以另一个数字,我们不必写: 5 * 4 = 20, 20 * 2 = 40 。我们可以简单地写成:5 * 4 * 2 = 40。表达式 (5 * 4) 隐含地等于 20,所以我们可以使用整个表达式来代替答案。这是一个正确的比较函数和返回值吗?
  • 或多或少,是的。但一般来说,一个函数不需要返回任何特殊的东西(如果你不指定返回值,它不会返回任何东西(null)。你可以让一个函数执行一些任意动作。本质上,函数只是一个将标签包裹在某些代码周围的便捷方法,这样您就可以在多个地方一遍又一遍地执行某些代码,而不是一遍又一遍地输入它
【解决方案2】:

关于表达式的一点点

在您进行编辑后,您似乎在询问expressions

expression 基本上是一个带有value 的 sn-p。在您的示例中,Jump(3)var x = 3 都是表达式,因为它们都有一个值。换句话说,Jump(3) 是一个值为6 的表达式,而(x=3) 实际上是一个计算结果为3 的表达式。

两者之间的唯一区别是第一个表达式还使用assignment operator(即=)分配一个值,而第二个表达式“只是”一个值。就此而言,在您的示例中,变量 x 也是一个计算结果为 3 的表达式。

有关此主题的更多信息,请参阅MDN - Expressions and operators in Javascript

言归正传

这意味着当您将参数传递给函数by-value 时,您实际上是在传递表达式的值。因此,在您的示例中,Jump(x)Jump(3)Jump((x=3))Jump(Jump(1.5)) 都将评估为 6

自然地,将常用操作的值存储在一个可以作为表达式快速求值的变量中,比每次求值时都进行计算的成本要低得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多