高阶函数如何理解通过函数参数点头提供的变量?
how do Higher Order function understand a variable which is nod fed through function argument?
我正在尝试了解 JavaScript 中高阶函数的机制。
我从eloquentJavaScript读到的例子如下
function greaterThan(n){
return m=>m>n;
}
const greaterThan10=greaterThan(10);
console.log(greaterThan10(11));
我想知道JS如何自动识别未传递给函数的变量'm'作为高阶第二个变量。
我假设在高阶函数中定义的任何变量都是为高阶保留的。
然后我按照下面的方式对其进行了测试。
function greaterThan(n){
console.log(m)
return m=>m>n;
}
它抛出一个错误,这意味着我的假设是错误的。
JS 如何像第一个示例中那样在高阶函数中准备自己。
代码似乎准备好了说
" m 不是其函数传递的参数,但稍后将以更高的顺序传递。"
它是如何为高阶函数做准备的?为什么我的试用(第二种方法)不起作用?
m
在这种情况下是由 greaterThan
.
返回的 lambda 函数的参数
function greaterThan(n) {
// This is lambda function which uses n from the greaterThan function and has m as a parameter
return (m) => m > n;
}
const greaterThan10 = greaterThan(10);
// This equals to this:
const greaterThan10 = (m) => m > 10;
// Which equals to this:
function greaterThan10(m) {
return m > 10;
}
您的代码注释如下:
function greaterThan(n){
console.log(m); // At this point the below function doesn't exist and has not been called yet
return m => m > n; // You're returning a function here with a parameter named m;
}
当您调用 greaterThan(10)
时,您会得到一个 function
,它需要两个输入才能 return 结果:
m
当您进一步调用由 greaterThan(10)
编辑的函数 return 时解析
n
这是对 greaterThan
参数的引用。由于 JavaScript 的 closure 机制 ,它得以保持存活(未被垃圾收集器销毁)
function greaterThan(n){
return m=>m>n;
// 这里你实际上是返回一个箭头 fn 它将 m 作为参数
}
const greaterThan10=greaterThan(10);
// 返回的 fn 引用将被赋值给 greaterThan10
// 大于 10 = m => m>11
console.log(greaterThan10(11));
// 这里你将 11 作为参数传递给你返回的箭头 fn
你正在尝试在你发送参数 m 之前记录 m
我正在尝试了解 JavaScript 中高阶函数的机制。
我从eloquentJavaScript读到的例子如下
function greaterThan(n){
return m=>m>n;
}
const greaterThan10=greaterThan(10);
console.log(greaterThan10(11));
我想知道JS如何自动识别未传递给函数的变量'm'作为高阶第二个变量。 我假设在高阶函数中定义的任何变量都是为高阶保留的。 然后我按照下面的方式对其进行了测试。
function greaterThan(n){
console.log(m)
return m=>m>n;
}
它抛出一个错误,这意味着我的假设是错误的。 JS 如何像第一个示例中那样在高阶函数中准备自己。 代码似乎准备好了说
" m 不是其函数传递的参数,但稍后将以更高的顺序传递。"
它是如何为高阶函数做准备的?为什么我的试用(第二种方法)不起作用?
m
在这种情况下是由 greaterThan
.
function greaterThan(n) {
// This is lambda function which uses n from the greaterThan function and has m as a parameter
return (m) => m > n;
}
const greaterThan10 = greaterThan(10);
// This equals to this:
const greaterThan10 = (m) => m > 10;
// Which equals to this:
function greaterThan10(m) {
return m > 10;
}
您的代码注释如下:
function greaterThan(n){
console.log(m); // At this point the below function doesn't exist and has not been called yet
return m => m > n; // You're returning a function here with a parameter named m;
}
当您调用 greaterThan(10)
时,您会得到一个 function
,它需要两个输入才能 return 结果:
m
当您进一步调用由greaterThan(10)
编辑的函数 return 时解析
n
这是对greaterThan
参数的引用。由于 JavaScript 的 closure 机制 ,它得以保持存活(未被垃圾收集器销毁)
function greaterThan(n){
return m=>m>n;
// 这里你实际上是返回一个箭头 fn 它将 m 作为参数
}
const greaterThan10=greaterThan(10);
// 返回的 fn 引用将被赋值给 greaterThan10 // 大于 10 = m => m>11
console.log(greaterThan10(11));
// 这里你将 11 作为参数传递给你返回的箭头 fn
你正在尝试在你发送参数 m 之前记录 m