Javascript 为什么箭头函数不传递参数?

Javascript 为什么箭头函数不传递参数?,javascript,ecmascript-6,rxjs,arrow-functions,Javascript,Ecmascript 6,Rxjs,Arrow Functions,我使用angular w/rxjs来观察界面上的用户事件。但是,我在向arrow函数中的方法传递参数时遇到了一个非常简单的问题。问题是: 这不起作用:未将searchterm传递给此。searchFacilities ngOnInit() { this.searchTerm$.subscribe(searchterm => this.searchFacilities);/**Not working here**/ } searchFacilities(term: string){

我使用angular w/rxjs来观察界面上的用户事件。但是,我在向arrow函数中的方法传递参数时遇到了一个非常简单的问题。问题是:

这不起作用:未将searchterm传递给此。searchFacilities

ngOnInit() {
 this.searchTerm$.subscribe(searchterm => this.searchFacilities);/**Not working here**/
}

searchFacilities(term: string){
  console.log(term);
  this.facilityservice.searchFacilities(term)
    .subscribe(results => this.facilityList = results);
}
但这是有效的:

this.searchTerm$.subscribe(searchterm => { this.searchFacilities(searchterm); })

很明显,我有其他的解决方案,这些解决方案非常简单,但我真的很想了解为什么我的第一种方法不起作用。谢谢

因为你得到了对搜索词的引用,但你没有用它做任何事情。您只需执行
this.searchTerm$.subscribe(this.searchFacilities)
即可,该术语将被传递到函数中

因为你得到了对搜索词的引用,但你没有用它做任何事情。您只需执行
this.searchTerm$.subscribe(this.searchFacilities)
即可,该术语将被传递到函数中

因为参数没有直接传递给函数

示例来自:

与箭头函数相同的示例:

Rx.Observable.range(0, 3).subscribe(x => console.log(x));

因为参数不是直接传递给函数的

示例来自:

与箭头函数相同的示例:

Rx.Observable.range(0, 3).subscribe(x => console.log(x));

searchFacilities函数在全局范围内声明,然后作为回调在ngOnInit内部调用,其上下文不再是全局范围,现在指向ngOnInit元素对象。为了在ngOnInit对象内部工作,您需要绑定它,然后searchFacilities成为ngOnInit的方法,这样它就会工作。

searchFacilities函数在全局范围内声明,然后在ngOnInit内部作为回调调用,其上下文不再是全局范围,现在这个指向ngOnInit元素对象。为了在ngOnInit对象内部工作,您需要绑定它,然后搜索工具成为ngOnInit的方法,这样它就可以工作了。

小说明。文档说您需要将回调传递给
subscribe()
,并且该回调将接收可观察对象发出的值

我们可以这样写:

constmycallback=(val)=>console.log(val);
可观察范围(0,3)。订阅(myCallBack);
在您的情况下,您已经有一个回调,
this.searchFacilities

这意味着您可以简单地编写:

this.searchTerm$.subscribe(this.searchFacilities);
就像您可以将我的原始示例改写为:

//现在`console.log`是回调!
可观测范围(0,3).subscribe(console.log);
换句话说,问题不是“为什么箭头函数不传递参数”。问题是您创建了一个箭头函数,其主体是您的回调函数,而不是直接使用回调函数

代码的扩展版本如下所示:

constmycallback=(searchterm)=>{
归还此设备;
}
如您所见,
searchFacilities
既没有被调用,也没有收到
searchterm
参数

通过编写以下代码,非ARROW函数也可能会遇到同样的问题(尽管ARROW函数的语法确实会使错误更容易发生且更隐蔽):

const myCallBack=函数(searchterm){
归还此设备;
}

小澄清。文档说您需要将回调传递给
subscribe()
,并且该回调将接收可观察对象发出的值

我们可以这样写:

constmycallback=(val)=>console.log(val);
可观察范围(0,3)。订阅(myCallBack);
在您的情况下,您已经有一个回调,
this.searchFacilities

这意味着您可以简单地编写:

this.searchTerm$.subscribe(this.searchFacilities);
就像您可以将我的原始示例改写为:

//现在`console.log`是回调!
可观测范围(0,3).subscribe(console.log);
换句话说,问题不是“为什么箭头函数不传递参数”。问题是您创建了一个箭头函数,其主体是您的回调函数,而不是直接使用回调函数

代码的扩展版本如下所示:

constmycallback=(searchterm)=>{
归还此设备;
}
如您所见,
searchFacilities
既没有被调用,也没有收到
searchterm
参数

通过编写以下代码,非ARROW函数也可能会遇到同样的问题(尽管ARROW函数的语法确实会使错误更容易发生且更隐蔽):

const myCallBack=函数(searchterm){
归还此设备;
}

searchterm=>this.searchFacilities
=
函数(searchterm){返回this.searchFacilities}
为什么要调用
this.searchFacilities(searchterm)
?O.oJust do
this.searchTerm$.subscribe(this.searchFacilities)在引用时将箭头省略!我真的怀疑最后一个片段是否真的有用work@Bergi-你说得对,我订阅了另一个主题,它也调用了这个方法…我在测试中被搞混了。谢谢!@adeneo-这实际上更干净了,只要我停下来想一想,它就有意义了。+1
searchterm=>这个。searchFacilities
=
函数(searchterm){return this.searchFacilities}
为什么要调用
this.searchFacilities(searchterm)
?O.oJust do
this.searchterm$.subscribe(this.searchFacilities);
在引用时,您省略了箭头!我真的怀疑最后一个代码片段是否正确work@Bergi-你说得对,我还有另一个主题我订阅了一个调用此方法的。。