1

我看过很多例子,但仍然无法弄清楚 return 语句是如何工作的。

 function One() {
   var newVal = 0;
   Too();
   console.log(newVal);
 }

 function Too(newVal) {
   ++newVal; 
   return(newVal);
 }

这不应该将 1 打印到控制台吗?我真正想做的是让函数 Too 每次调用时都会将 newVal 增加 1。但我什至无法弄清楚如何让 return 语句起作用。我应该提到我不想使用全局变量。谢谢你的帮助。

4

3 回答 3

4

这不应该将 1 打印到控制台吗?

不,newVal里面Too不是newVal里面One。他们是完全分开的。

我真正想做的是让函数 Too 每次调用时都会将 newVal 增加 1。

它不能,JavaScript 没有任何机制通过引用传递变量,就像其他一些语言一样(例如 C#refout参数)。最接近的方法是传入对对象的引用并修改对象的状态(这真的很不同,我不会在这里讨论它,因为它会混淆事物:-))。

return这些都与声明无关。

做你所描述的最简单的方法是:

function One() {
    var newVal = 0;
    newVal = Too(newVal);
    console.log(newVal);
}

function Too(arg) {
    ++arg; 
    return arg;
}

这是我们调用时会发生的情况One

  1. 创建了一个名为的局部变量newVal
  2. 其值设置为0
  3. 其值的副本Too作为参数传递给函数。newVal这与变量没有链接。
  4. Tooarg被调用,在其参数中接受该值(JavaScript 中的参数实际上是局部变量)。
  5. Too增加 中的值arg
  6. Too返回所持有的值的副本arg作为其返回值
  7. 的返回值Too分配给变量newVal
  8. 我们输出该值(通过将其传递给console.log)。
于 2013-10-10T21:23:55.480 回答
2

不,不应该。该return语句确定当控制权返回时函数调用的值将在调用环境中是什么。由于您的调用环境不使用返回值,因此没有净效应。

以下是您如何取回价值:

newVal = Too(newVal);

如果您想创建一个充当计数器的函数,以便每次调用它时都会返回一个新数字,您可以执行以下操作:

var counter = function(initial) {
  var c = initial || 0;
  return function() {
    return c++;
  };
}(0);

这样做是使用匿名函数为另一个函数设置持久环境,当它(立即)被调用时从外部返回。然后可以调用返回的函数以从其私有计数器(变量“c”)返回一个新值:

var currentCount = counter();
alert(currentCount); // 0, the first time
currentCount = counter();
alert(currentCount); // 1, and so on
于 2013-10-10T21:23:45.533 回答
1

如果一个函数返回一个值,您需要在您的函数中调用该函数console.log或捕获返回的值。

function One() {
   var newVal = 0;

   console.log(Too(newVal));
 }

 function Too(newVal) {
   ++newVal; 
   return(newVal);
 }
于 2013-10-10T21:27:43.843 回答