繁体   English   中英

JavaScript调用与返回函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM