Javascript 回调和高阶函数

Javascript 回调和高阶函数,javascript,callback,higher-order-functions,Javascript,Callback,Higher Order Functions,这是《雄辩JS》第5章中的一个问题 有人能解释一下f(arg)的意义吗?我的意思是,他在另一个参数arg上调用参数f??我很困惑 有返回值的部分如何;为什么一定要在那里?当我删除它时,代码仍然像应该的那样运行 最后,有人能逐行解释代码解释吗?在示例中传递布尔值有什么意义 非常感谢要记住的一条简单规则是Javascript中的嵌套函数(例如,在其他函数中声明的函数)可以访问其父函数的所有变量和参数 当调用noised(f)并返回另一个函数时,会在Javascript中创建一个闭包。这意味着,即使n

这是《雄辩JS》第5章中的一个问题

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

有返回值的部分如何;为什么一定要在那里?当我删除它时,代码仍然像应该的那样运行

最后,有人能逐行解释代码解释吗?在示例中传递布尔值有什么意义


非常感谢

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

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

因此,当调用该内部函数时,它可以从其父函数的先前执行中完全访问
f
参数。下面是一篇可能值得一读的文章和一篇解释闭包的文章

因此,让我们一步一步地分解代码所做的工作:

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);
调用
Noised(Boolean)
时,返回内部函数,对于该内部函数的任何未来调用,
f
参数设置为
Boolean
构造函数

当返回的函数用它自己的参数调用时,如上面的
temp(12)
中所述,那么它最终执行
Boolean(12)
并返回该值(谁的值将为
true

工作演示:

基础:

noised
将一个函数映射到另一个函数,该函数与原始函数相同,但将输入和输出值(更精确地说是其字符串表示)写入控制台

  • Q1:其目的似乎是通过一个简单的日志功能来增强对象构造函数,以显示哪些初始化参数产生哪种对象状态。为此,
    noised
    返回一个函数对象—通过输出到控制台而增强的原始函数

  • Q2:调用增强的
    布尔
    构造函数时不指定其返回值。因此,增强构造函数是否返回值对代码没有影响

  • 问题3:
    Boolean
    显示不同初始化参数的布尔值。我想应该吸取的教训是,数值
    0
    会得到
    false
    ,其他任何
    true
    (后者是我猜测的结果,但对于
    noised
    ,您有一个工具可以对任意构造函数和初始化值进行常规检查)


保持简单:

函数noise(充当包装器)中的参数实际上是

(Boolean());

此外,您在内部函数中使用
0
作为console.log的参数,
和作为Boolean()的参数(在
var-val
中)


有返回值的部分如何;为什么一定要在那里?当我删除它时,代码仍然像应该的那样运行

只要您使用的是console.log,您实际上就不会使用return语句,但是如果要这样做的话

console.log(noisy(Boolean)(0))

您可以在前面的console.logs之后看到return语句

@YasharFeizi-这是否回答了您的问题?因为看起来您可能是StackOverflow新手,您是否知道如果您的问题得到了回答,那么您应该选择最佳答案并单击答案左侧的绿色复选标记。这将通知社区您的问题已得到回答,并为您和提供答案的人赢得一些声誉积分。
console.log(noisy(Boolean)(0))