JavaScript ES6:forEach循环中递归函数调用失败问题求助
解决forEach循环中this变为undefined的问题
嘿,刚入门JavaScript遇到this的绑定坑太正常了,我当初也踩过不少!你遇到的问题核心是JavaScript函数的this绑定规则:当你在forEach的普通回调函数里使用this时,它的指向会和外层上下文的this不一样——在严格模式下会直接变成undefined,这就是程序崩溃的原因。而你单独调用expandPipelineNode(node)时,this还是指向当前的上下文(比如类实例、当前对象),所以能正常执行。
下面给你几个常用的解决方案,挑你觉得顺手的来:
使用箭头函数
箭头函数不会创建自己的this,它会继承外层作用域的this。把forEach的回调改成箭头函数,就能直接用外层的this了:nodes.forEach(node => { this.expandPipelineNode(node); // 这里的this和外层上下文一致 });提前保存外层的this到变量
在外层先把this存成一个变量(比如that、self),然后在forEach的回调里用这个变量代替this:const that = this; nodes.forEach(function(node) { that.expandPipelineNode(node); });这个方法兼容性很好,在不支持箭头函数的旧环境里也能用。
利用forEach的第二个参数指定this
forEach方法本身支持传入第二个参数thisArg,用来指定回调函数内部的this指向:nodes.forEach(function(node) { this.expandPipelineNode(node); }, this); // 这里的this就是你想要绑定的外层上下文这是最贴合
forEach设计的解决方案,直接通过参数传递上下文,代码也很清晰。
试试上面的方法,应该就能解决你的问题啦!如果还有细节上的疑问,可以把相关的代码片段贴出来,大家再帮你进一步排查~
内容的提问来源于stack exchange,提问作者Code Pope
相关产品推荐
相关产品推荐

