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