理解return语句。

时间:2013-10-10 21:22:02

标签: javascript

我看了很多例子,但仍然无法确定return语句的工作原理。

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

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

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

3 个答案:

答案 0 :(得分:4)

  

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

没有。 newVal内的Too不是newVal内的One。他们是完全分开的。

  

我真正要做的就是让函数每次调用时都将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. 调用
  5. Too,在其arg参数中接受该值(JavaScript中的参数实际上是局部变量)。
  6. Too会增加arg
  7. 中的值
  8. Too会返回arg所持有的值的副本作为其返回值
  9. Too的返回值已分配给变量newVal
  10. 我们输出该值(将其传递给console.log)。

答案 1 :(得分: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

答案 2 :(得分:1)

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

function One() {
   var newVal = 0;

   console.log(Too(newVal));
 }

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