Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 ES6:来自foreach循环的递归函数调用失败_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript ES6:来自foreach循环的递归函数调用失败

Javascript ES6:来自foreach循环的递归函数调用失败,javascript,ecmascript-6,Javascript,Ecmascript 6,我是javascript新手 class ExpansionPath { expandPipelineNodes() { this.expandPipelineNode(this._rootNodes); } expandPipelineNode(node) { let bPipeline = false _.each(node.children,function(child){ bP

我是javascript新手

class ExpansionPath {
    expandPipelineNodes()
    {
        this.expandPipelineNode(this._rootNodes);
    }
    expandPipelineNode(node)
    {
        let bPipeline = false
        _.each(node.children,function(child){
            bPipeline |= this.expandPipelineNode(child);
        })

        ...
    }
}
当我调用函数expandPipelineNodes时,它调用expandPipelineNode(节点),这很好。但当它进入foreach循环时,程序崩溃。我已经调试了这个程序,它表明这在forEach循环中是未定义的。我还尝试了以下代码:

    node.children.forEach(function(child){
        bPipeline |= this.expandPipelineNode(child);
    })
但问题依然存在。
如何在javascript中解决此问题?

回调内部的作用域与外部的作用域不同。保留词法范围的简单方法是使用arrow函数:

_.each(node.children, (child) => {
    bPipeline |= this.expandPipelineNode(child);
})
您还可以使用:

但这更冗长


还有两种方法可以让它工作,但它们在2018年并不酷。

内部回调的作用域与外部回调的作用域不同。保留词法范围的简单方法是使用arrow函数:

_.each(node.children, (child) => {
    bPipeline |= this.expandPipelineNode(child);
})
您还可以使用:

但这更冗长


还有两种方法可以让它工作,但2018年它们并不酷。

你在循环中失去了
这个
的作用域,你必须绑定它,我该如何绑定它?你在循环中失去了
这个
的作用域,你必须绑定它,我该如何绑定它?好吧,在你的情况下,你可以替换
绑定(这个)
使用
,此
,但lodash选项没有此类功能谢谢。所以我现在读到箭头函数没有它自己的函数。所以它总是保留这个主要功能?是的,它有周围环境的上下文,词汇。我不知道为什么有人对你的答案投了反对票。非常感谢。我很抱歉,我没有意识到,
var that=this
在2018年并不酷;)好的,在您的情况下,您可以用
,this
替换
.bind(this)
,但是lodash选项没有这样的功能谢谢。所以我现在读到箭头函数没有它自己的函数。所以它总是保留这个主要功能?是的,它有周围环境的上下文,词汇。我不知道为什么有人对你的答案投了反对票。非常感谢。我很抱歉,我没有意识到,
var that=this
在2018年并不酷;)