Javascript 为什么要将console.log作为observable subscribe()函数的参数传递?

Javascript 为什么要将console.log作为observable subscribe()函数的参数传递?,javascript,angular,typescript,observable,angular-observable,Javascript,Angular,Typescript,Observable,Angular Observable,我对角度和函数式编程相当陌生,我对这种语法有疑问(我认为应该与函数式编程行为有关): courses$:可见; ................................. ................................. ................................. 这个.courses$.subscribe(console.log); 因此,课程$应该是一组可观察的(语法的确切含义是什么?) 最后一行似乎将订阅的内容打印到JavaScript控

我对角度和函数式编程相当陌生,我对这种语法有疑问(我认为应该与函数式编程行为有关):

courses$:可见;
.................................
.................................
.................................
这个.courses$.subscribe(console.log);
因此,课程$应该是一组可观察的语法的确切含义是什么?)


最后一行似乎将订阅的内容打印到JavaScript控制台中。但是这个语法的确切含义是什么呢?我知道console.log()是一个函数,它以必须打印的值作为参数。为什么在这种情况下,它作为subscribe函数的参数,而不是以()结尾?

它将函数引用
console.log
传递到
subscribe
中。Subscribe将在订阅发布后调用该函数。它传递的参数由subscribe在触发点确定。这只是将回调函数传递给subscribe。

它将函数引用
console.log
传递给
subscribe
。Subscribe将在订阅发布后调用该函数。它传递的参数由subscribe在触发点确定。这只是将回调函数传递给subscribe。

subscribe
接受函数作为
(参数:T)=>void
类型的参数,其中T是
可观察的
的模板

这三种方法的作用类似:

this.courses$.subscribe(console.log);
this.courses$.subscribe(function (p: {}[]): void { console.log(p); });
this.courses$.subscribe((p: {}[]): void => console.log(p));

在每种类型的函数声明之间,捕获的变量和作用域都有一些不同,但在这个特定的示例中,它们的工作原理是相同的。

subscribe
接受一个函数作为
(参数:T)=>void
类型的参数,其中T是
可观察的
的模板

这三种方法的作用类似:

this.courses$.subscribe(console.log);
this.courses$.subscribe(function (p: {}[]): void { console.log(p); });
this.courses$.subscribe((p: {}[]): void => console.log(p));

每种类型的函数声明在捕获的变量和作用域上都有一些不同,但在这个特定的示例中,它们的工作原理是相同的。

为了更好地理解它:在JavaScript中,函数是第一类对象,这意味着它们可以被视为普通变量、作为参数传递、修改或删除。看看这个:

something => console.log(something)
如您所见,这是一个将某些内容记录到控制台的函数。什么是
console.log
?嗯,这是一个功能,记录一些东西到控制台,没有什么不同

请考虑以下伪代码:

Observable.prototype.subscribe = function(callback) {
   // every time a new value is emitted 
   callback(newValue);
}

当然,
.subscribe
方法实际上并不是这样实现的,但它本质上是这样做的:当一个可观察对象接收到一段新数据时,它将调用您提供的回调,并将
next
值作为第一个参数传递给该回调。希望这能为您澄清一些问题。

为了更好地理解它:在JavaScript中,函数是第一类对象,这意味着它们可以被视为普通变量、作为参数传递、修改或删除。看看这个:

something => console.log(something)
如您所见,这是一个将某些内容记录到控制台的函数。什么是
console.log
?嗯,这是一个功能,记录一些东西到控制台,没有什么不同

请考虑以下伪代码:

Observable.prototype.subscribe = function(callback) {
   // every time a new value is emitted 
   callback(newValue);
}

当然,
.subscribe
方法实际上并不是这样实现的,但它本质上是这样做的:当一个可观察对象接收到一段新数据时,它将调用您提供的回调,并将
next
值作为第一个参数传递给该回调。希望这能帮您解决问题。

此外,如果您传入了
console.log()
,您将执行该函数并传入其结果,而不是对函数本身的引用。Subscribe将稍后在observable调用下一个函数时调用该函数。它不会在
complete
error
上调用,这就是
subscribe
方法的参数2和3。此外,如果传入
console.log()
,您将执行该函数并传入其结果,而不是函数本身的引用。subscribe稍后将调用该函数,当可观察对象调用下一个函数时。它不会在
complete
error
上调用,这就是
subscribe
方法的参数2和3对于
Observable
的作用,意味着它是普通obects数组的
Observable
,即
[{},{},{}]
例如
Observable
意味着它是普通对象数组的
Observable
,例如
[{},{},{}]