我看了很多例子,但仍然无法确定return语句的工作原理。
function One() {
var newVal = 0;
Too();
console.log(newVal);
}
function Too(newVal) {
++newVal;
return(newVal);
}
这不应该打印到控制台吗?我真正想要做的就是让函数每次调用时都将newVal增加1。但我甚至无法弄清楚如何让return语句起作用。我应该提到我不想使用全局变量。谢谢你的帮助。
答案 0 :(得分:4)
这不应该打印到控制台吗?
没有。 newVal
内的Too
不是newVal
内的One
。他们是完全分开的。
我真正要做的就是让函数每次调用时都将newVal增加1。
它不能,JavaScript没有像其他语言那样通过引用传递变量的任何机制(例如C#的ref
和out
参数)。你最接近的是传递一个对象的引用并修改对象的状态(这是非常不同的,我不会在这里讨论,因为它会混淆事情:-))。
其中任何一项都与return
声明无关。
执行您所描述的内容的最简单方法是:
function One() {
var newVal = 0;
newVal = Too(newVal);
console.log(newVal);
}
function Too(arg) {
++arg;
return arg;
}
以下是我们致电One
时发生的事情:
newVal
的局部变量。0
。Too
。这没有返回newVal
变量的链接。Too
,在其arg
参数中接受该值(JavaScript中的参数实际上是局部变量)。Too
会增加arg
。Too
会返回arg
所持有的值的副本作为其返回值。Too
的返回值已分配给变量newVal
。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);
}