Javascript 类型脚本-全局函数?
我试图从Typescript中的5层嵌套函数调用一个函数,但它无法看到外部函数。在setTimeout内运行Javascript 类型脚本-全局函数?,javascript,function,typescript,global,Javascript,Function,Typescript,Global,我试图从Typescript中的5层嵌套函数调用一个函数,但它无法看到外部函数。在setTimeout内运行console.log(this)将返回窗口对象 export class SearchComponent implements OnInit { lifeCycleFunc(){ //Function 1 ... if() { //Function 2 .... var.do(item =>
console.log(this)
将返回窗口
对象
export class SearchComponent implements OnInit {
lifeCycleFunc(){ //Function 1
...
if() { //Function 2
....
var.do(item => { //Function 3
....
var.forEach(var => { //Function 4
...
setTimeout(function(){ //Function 5
this.searchFunc() //this.searchForAssignments is not a function
}
})
})
}
}
searchFunc(){
...
}
}
forEach
中的this
引用是forEach函数。您需要将它绑定到类的this引用
forEach
中的this
引用是forEach函数。您需要将其绑定到类的this引用。此上下文在setTimeout
回调中将是全局对象(window
),但它应该是SearchComponent
类,此代码才能正常工作。要实现所有嵌套函数(包括setTimeout
callback)都应该是箭头函数,以便正确绑定此
上下文:
export class SearchComponent implements OnInit {
lifeCycleFunc(){
...
if(condition) {
...
foo.do(bar => {
...
bar.forEach(baz => {
...
setTimeout(() => {
this.searchFunc();
}, 0);
});
});
}
}
searchFunc(){
...
}
}
setTimeout回调中的上下文将是全局对象(window
),但它应该是SearchComponent
类,这样代码才能正常工作。要实现所有嵌套函数(包括setTimeout
callback)都应该是箭头函数,以便正确绑定此
上下文:
export class SearchComponent implements OnInit {
lifeCycleFunc(){
...
if(condition) {
...
foo.do(bar => {
...
bar.forEach(baz => {
...
setTimeout(() => {
this.searchFunc();
}, 0);
});
});
}
}
searchFunc(){
...
}
}
要回答有关将其设置为箭头功能的问题和评论,请执行以下操作:
setTimeout(() => {
this.searchFunc();
}, 0);
而不是:
setTimeout(function() {
this.searchFunc();
}, 0);
要回答有关将其设置为箭头功能的问题和评论,请执行以下操作:
setTimeout(() => {
this.searchFunc();
}, 0);
而不是:
setTimeout(function() {
this.searchFunc();
}, 0);
这是在课堂上吗?如果是这样,我们可以看到该类的上下文,或者如果不是这样,那么只需在SearchFuncy前面删除“this”,是的,这是在一个类中。我更新了我的代码。这在课堂上吗?如果是这样,我们可以看到该类的上下文,或者如果不是这样,那么只需在SearchFuncy前面删除“this”,是的,这是在一个类中。我更新了代码,上面写着“找不到名称绑定”。我必须从某处导入它吗?哦,等等,这可能对lambda不起作用*对不起,我的电话在这里。你不需要导入bind。你是不是碰巧像静态方法一样调用它?就像SearchSchoolComponent.lifeCycleFunc()??不,我一直在狂热地打字,直到我在那一行中遇到了而不是函数错误。我没有从其他任何地方引用整个类。它说“找不到名称绑定”。我必须从某处导入它吗?哦,等等,这可能对lambda不起作用*对不起,我的电话在这里。你不需要导入bind。你是不是碰巧像静态方法一样调用它?就像SearchSchoolComponent.lifeCycleFunc()??不,我一直在狂热地打字,直到我在那一行中遇到了而不是函数错误。我没有从其他地方引用整个类。我所有的回调都已经使用了箭头函数,如您所示。在setTimeout中运行console.log(this)
会为我返回窗口
对象。@您问题中的FiringBlanks函数5不是箭头函数setTimeout
不是箭头函数?那么我该怎么做呢?我所有的回调都已经使用了箭头函数,如您所示。在setTimeout中运行console.log(this)
会为我返回窗口
对象。@您问题中的FiringBlanks函数5不是箭头函数setTimeout
不是箭头函数?那么我该怎么做呢?如果你想回答一条评论,你必须将它设置为你正在回答的评论下的评论,因为这不是对原始问题的回答。是的,我不能添加评论,因为我没有50个代表,这是一个荒谬的限制。哦,它确实回答了这个问题。好吧,但是你回答的方式被认为是在评论上。但是,你可以编辑它,使其清楚地回答原始问题。如果你想回答评论,你必须将其设置为你正在回答的评论下的评论,因为这不是原始问题的答案。是的,我不能添加评论,因为我没有50个代表,这是一个荒谬的限制。哦,它确实回答了这个问题。好吧,但是你回答的方式被认为是在评论上。但是,您可以对其进行编辑,使其清楚地回答原始问题。