[英]Javascript Calling Versus Returning Functions
在我提出问题之前,这里是有关区域之前的代码。
function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--)
list = {value: array[i], rest: list};
return list;
}
function listToArray(list) {
var array = [];
for (var node = list; node; node = node.rest)
array.push(node.value);
return array;
}
现在,有人可以解释调用函数和返回函数之间的区别。 调用函数时,结果不确定。 但是,如果我返回函数,答案是正确的。 有人可以向我解释两者之间的区别吗?
随着回报:
function nth(list, n) {
if (!list)
return undefined;
else if (n == 0){
return list.value;
}
else
return nth(list.rest, n - 1);
}
没有退货:
function nth(list, n) {
if (!list)
return undefined;
else if (n == 0){
return list.value;
}
else
nth(list.rest, n - 1);
}
谢谢你的帮助!
在第二个片段中, else
分支中未返回任何else
。 您递归调用函数。 该函数将返回一个值,但仅返回其调用自身。 返回的值将被丢弃,最终结果是,最初撤消该功能时,没有任何东西返回到该位置。
在第一个(有效的)代码段中,返回值不断传递到递归的外层。
顺便说一句,在任何情况下都不会“返回功能”。 在这两种情况下,您都调用该函数,但在第一种情况下,您还返回其返回值(将其传递给调用方),而在第二种情况下,将忽略该返回值。
在具有单独功能的版本下面,这可能比此递归更为清楚。
function h() { return "Hello world"; } function a() { return h(); // Calls h() and returns the value that was returned from h() to the caller. } function b() { h(); // Also calls h(), but does nothing with its return value. b() itself returns nothing. } alert("a returns: " + a()); // Hello world alert("b returns: " + b()); // Undefined
如果您不返回任何内容,那么等待函数调用的变量将是未定义的。 返回函数调用时,您将返回执行结果。 当您仅执行函数时,您不会返回该执行的结果。 让我给你看一个例子: 小提琴
如果您尝试返回一个稍后要调用的函数,也可以这样做,但是您需要返回不带括号的函数名称。 看到这里: 小提琴
这是上面提到的所有内容的完整代码示例:
function doWork(){ writeResult('doWork Starting'); return 1; } function myFunctionWithReturn() { writeResult('myFunctionWithReturn Starting'); return doWork(); } function myFunctionWithoutReturn(){ writeResult('myFunctionWithoutReturn Starting'); doWork(); } function myFunctionWithFunctionReturned() { writeResult('myFunctionWithFunctionReturned Starting'); return myCallback; } function myCallback() { return 'Callback was called!'; } function writeResult(message) { document.getElementById("result").innerHTML += "</br>" + message; } writeResult('Starting with return first...'); var result = myFunctionWithReturn(); writeResult('Result: ' + result); writeResult('Now doing without return...'); result = myFunctionWithoutReturn(); writeResult('Result: ' + result); writeResult('Now doing returning a function to call later...'); result = myFunctionWithFunctionReturned(); writeResult('Result: ' + result); writeResult('Now calling the function that was returned...'); result = result(); writeResult('Result: ' + result); writeResult('Done.');
<div id="result"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.