此嵌套函数中 "this" 关键字的意义是什么
What's the significance of the "this" keyword in this nested function
此函数计算 JavaScript 中的 f(g(...arg))
。
function compose(f,g){
return function(...arg){
return f.call(this, g.apply(this, args)};
}
}
我知道方法 call
和 apply
的第一个参数是调用上下文。但是,我不确定 this
关键字在上述 call
和 apply
方法中的意义是什么。当调用上下文是像 {x:1}
这样的对象时,我更清楚,然后我们可以使用 this.x
来访问 属性 x
,但我不清楚在上述上下文中使用 this
。为什么我们在上面的代码中使用 this
?
编辑:使用这些函数调用函数:
const sum = (x, y) => x + y;
const square = x => x * x;
compose(square, sum)(2, 3);
这是因为我们要保留this
的原始调用值,并将其转发给所有组合函数。
如果我们将不使用 this
的函数组合在一起,这并不重要,就像您的示例一样:
const sum = (x, y) => x + y;
const square = x => x * x;
compose(square, sum)(2, 3);
在这里,this
是无关紧要的。
但是,组合是通用的,应该适用于任何一对函数。我们可以使用this
,在这种情况下最好保留它们的工作方式以备不时之需:
function compose(f, g){
return function(...args){
return f.call(this, g.apply(this, args));
}
}
function introduce(greeting) {
return `${greeting}! My name is ${this.name}.`;
}
function addRandomFact(str) {
return `${str} I like ${this.hobby}.`;
}
const person1 = {
name: "Alice",
hobby: "pancakes",
introduce: introduce,
}
console.log(person1.introduce("Hello"));
const person2 = {
name: "Bob",
hobby: "turtles",
introduce: compose(addRandomFact, introduce)
}
console.log(person2.introduce("Hola"));
此函数计算 JavaScript 中的 f(g(...arg))
。
function compose(f,g){
return function(...arg){
return f.call(this, g.apply(this, args)};
}
}
我知道方法 call
和 apply
的第一个参数是调用上下文。但是,我不确定 this
关键字在上述 call
和 apply
方法中的意义是什么。当调用上下文是像 {x:1}
这样的对象时,我更清楚,然后我们可以使用 this.x
来访问 属性 x
,但我不清楚在上述上下文中使用 this
。为什么我们在上面的代码中使用 this
?
编辑:使用这些函数调用函数:
const sum = (x, y) => x + y;
const square = x => x * x;
compose(square, sum)(2, 3);
这是因为我们要保留this
的原始调用值,并将其转发给所有组合函数。
如果我们将不使用 this
的函数组合在一起,这并不重要,就像您的示例一样:
const sum = (x, y) => x + y;
const square = x => x * x;
compose(square, sum)(2, 3);
在这里,this
是无关紧要的。
但是,组合是通用的,应该适用于任何一对函数。我们可以使用this
,在这种情况下最好保留它们的工作方式以备不时之需:
function compose(f, g){
return function(...args){
return f.call(this, g.apply(this, args));
}
}
function introduce(greeting) {
return `${greeting}! My name is ${this.name}.`;
}
function addRandomFact(str) {
return `${str} I like ${this.hobby}.`;
}
const person1 = {
name: "Alice",
hobby: "pancakes",
introduce: introduce,
}
console.log(person1.introduce("Hello"));
const person2 = {
name: "Bob",
hobby: "turtles",
introduce: compose(addRandomFact, introduce)
}
console.log(person2.introduce("Hola"));