为什么这样做:
this.example = element => {
console.log(element, element, element);
};
this.example.call({}, 'yo');
//prints yo yo yo
与此相反的是:
this.example = element => {
console.log(element, element, element);
};
this.example.call('yo');
/// prints undefined
我似乎不明白为什么第二个例子没有定义。为什么需要使用参数(在本例中为空对象),以便调用返回所需的解决方案?
编辑:
对于那些注释:在ES6语法中,“这”似乎被忽略了
example = element => {
console.log(element, element, element); // yo yo yo
console.log(this); // {}
};
function example(element) {
console.log(element, element, element); // yo yo yo
console.log(this); // {newObjKey: 'value'}
}
example.call({ newObjKey: 'value' }, 'yo');
发布于 2019-10-26 10:40:43
call
方法的第一个参数是函数绑定到的this
引用。但是,由于它是一个箭头函数,所以the first parameter of call
is ignored (但是,它仍然是计算的!)。call
函数在this
引用之后的所有其他参数都作为函数参数传递。
在第一个示例中,{}
被忽略,"yo"
作为参数传递给example
函数。在第二个示例中,"yo"
被忽略,您没有提供第二个参数,因此默认情况下它是undefined
。
发布于 2019-10-26 11:03:53
调用、应用和绑定方法帮助我们更改这个(上下文)内部函数。
首先,您不能使用调用、应用、绑定和箭头函数,因为箭头函数没有上下文,而内部箭头函数像其他变量一样,在词汇上得到这个值。
您的第一个示例返回"yo“、”yo“、"yo",因为调用函数的第一个参数更改了这个(上下文)值以及其他类似于参数的参数。
在您的第二个示例中,返回“未定义”3x时间,因为您更改了这个值,并且U不传递任何参数,如果您不传递任何参数,则其值将是未定义的。
https://stackoverflow.com/questions/58573616
复制