javascript - 回调和高阶函数 Javascript

标签 javascript callback higher-order-functions

这是 Eloquent JS 第 5 章的问题 http://eloquentjavascript.net/05_higher_order.html

function noisy(f) {
  return function(arg) {
     console.log("calling with", arg);
     var val = f(arg);
     console.log("called with", arg, "- got", val);
     return val;
   };
 }
noisy(Boolean)(12);
// → calling with 0
// → called with 0 - got false

有人可以解释一下 f(arg) 的意义吗?我的意思是他在另一个参数 arg 上调用参数 f ?我很困扰。

有返回值的部分怎么样;为什么它必须在那里?当我删除它时,代码仍然按预期运行。

最后,可以逐行解释一下代码解释吗?在示例中传递 bool 值有何意义?

非常感谢

最佳答案

要记住的一个简单规则是 Javascript 中的嵌套函数(例如在其他函数中声明的函数)可以访问其父函数的所有变量和参数。

当调用 noisy(f) 并返回另一个函数时,该函数会在 Javascript 中创建一个闭包。这意味着即使 noisy(f) 已完成执行,它的参数和任何局部变量仍然有效,并且仍然可以被内部函数使用。

因此,当调用该内部函数时,它可以完全访问先前执行的父函数中的 f 参数。这是 MDN reference on closures这可能值得一读,并且 StackOverflow answer解释闭包。

那么,让我们逐步分解您的代码正在执行的操作:

function noisy(f) {
  return function(arg) {
     console.log("calling with", arg);
     var val = f(arg);
     console.log("called with", arg, "- got", val);
     return val;
   };
 }

// split up noisy(Boolean)(12); into two steps
var temp = noisy(Boolean);
temp(12);

当调用 noisy(Boolean) 时,将返回内部函数,并且对于该内部函数的任何 future 调用,f 参数将设置为 bool 构造函数。

当使用它自己的参数调用返回的函数时,如上面的 temp(12) 所示,它最终会执行 Boolean(12) 并返回该值(谁是值将为true)。

工作演示:http://jsfiddle.net/jfriend00/mkn839gu/

关于javascript - 回调和高阶函数 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28636522/

相关文章:

javascript - Materializecss + Angular Cli - 选择组件未正确下拉

javascript - ANTLR,JavaScript 中可选 ';'

events - 如何向 sqlalchemy 模型添加事件回调?

javascript - 为什么这个函数有第二个参数在单独的括号中?

performance - 为什么 Haskell (GHC) 这么快?

javascript - 如何在运行脚本之前等待页面完成所有内容的加载或如何最好地检测主要的 DOM 更改

javascript - Selenium WebDriver 点击隐藏元素

mysql - Codeigniter 中的 mysql 错误表单验证

javascript - NodeJS - 如何打破一个功能?

reactjs - 使用 react 钩子(Hook)过滤类别