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
,例如[{},{},{}]