Javascript 什么';这句话的意义是什么;这";此嵌套函数中的关键字

Javascript 什么';这句话的意义是什么;这";此嵌套函数中的关键字,javascript,function-composition,Javascript,Function Composition,此函数在JavaScript中计算f(g(…arg)) function compose(f,g){ return function(...arg){ return f.call(this, g.apply(this, args)}; } } 我知道方法call和apply的第一个参数是调用上下文。但是,我不确定上述call和apply方法中的this关键字的意义。当调用上下文是像{x:1}这样的对象时,我更清楚,然后我们可以使用this.x访问属性x,但我不清楚在上

此函数在JavaScript中计算
f(g(…arg))

function compose(f,g){
   return function(...arg){
       return f.call(this, g.apply(this, args)};
   }
}
我知道方法
call
apply
的第一个参数是调用上下文。但是,我不确定上述
call
apply
方法中的
this
关键字的意义。当调用上下文是像
{x:1}
这样的对象时,我更清楚,然后我们可以使用
this.x
访问属性
x
,但我不清楚在上面的上下文中使用
this
。为什么我们要像上面的代码那样使用
这个

编辑:使用以下函数调用函数:

const sum = (x, y) => x + y;
const square = x => x * x;
compose(square, sum)(2, 3);

这是因为我们希望保留
This
的原始调用值,并将其转发给所有组合函数

如果我们将不使用此的函数组合在一起,这无关紧要,就像您的示例:

const sum = (x, y) => x + y;
const square = x => x * x;
compose(square, sum)(2, 3);
在这里,
这个
是不相关的

但是,组合是通用的,应该应用于任何一对函数。我们可以使用
这个
,在这种情况下,最好保留它们的工作方式,以防出现问题:

函数组合(f,g){
返回函数(…args){
返回f.call(this,g.apply(this,args));
}
}
功能介绍(问候语){
返回`${greeting}!我的名字是${this.name}。`;
}
函数addRandomFact(str){
返回${str}我喜欢${this.hobby};
}
const person1={
姓名:“爱丽丝”,
爱好:“煎饼”,
介绍:介绍,,
}
console.log(person1.introduct(“Hello”));
const person2={
姓名:“鲍勃”,
爱好:“海龟”,
介绍:撰写(添加事实,介绍)
}

console.log(person2.introduct(“Hola”))
在您的特定情况下,它指的是匿名函数本身。你也可以看看这个问题的答案:@Seblor它不是吗?和往常一样,这取决于它的调用方式。由于匿名函数没有任何属性,如果它是
this
的值(正如VLAZ指出的,它不是)。@VLAZ我看不出它如何不能用这个片段引用匿名函数。我真的很想看到一个不属于这种情况的情况。@Seblor
这个
几乎从不涉及函数。看看你贴的链接。这取决于函数的调用方式。绝大多数情况下,它类似于
obj.foo()
,用
this=obj
调用
foo
。仅调用
foo
不会设置
上下文(结果在严格模式和非严格模式之间有所不同)。通过
.call
/
.apply
显式提供
参数是使其引用函数的唯一方法,但也很少这样做。