Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型脚本-全局函数?_Javascript_Function_Typescript_Global - Fatal编程技术网

Javascript 类型脚本-全局函数?

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 =>

我试图从Typescript中的5层嵌套函数调用一个函数,但它无法看到外部函数。在setTimeout内运行
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个代表,这是一个荒谬的限制。哦,它确实回答了这个问题。好吧,但是你回答的方式被认为是在评论上。但是,您可以对其进行编辑,使其清楚地回答原始问题。