闭包内如何访问外部变量?

数据类似于:[
            {"id":28,"text":"公司信息",    
                "children":[
                    {"id":1,"text":"公司文化"},{"id":2,"text":"招聘计划"},
                    {"id":6,"text":"公司新闻","children":[{"id":47,"text":"行业新闻"}]},
                    {"id":11,"text":"内部新闻","children":[{"id":24,"text":"行政信息"},{"id":27,"text":"高层指示"}]},
                    {"id":22,"text":"联系我们"},
                    {"id":26,"text":"产品展示","children":[{"id":32,"text":"电力产品"},{"id":33,"text":"配件介绍","children":[{"id":55,"text":"公司文化"}]}
                    ]}
                ]
             }
         ] 
         


 for (let i=0,len=data.length;i<len;i++) {
    if (this.organformId === data[i].organguid) {
        data[i].organname = datas[0].organName
    } 
    else {
        if (data[i].children != null && data[i].children.length>0) {
            console.log(this.organformId) //可以访问到
            (function () {
                var _obj = arguments[0];
                console.log(this.organformId)//访问不到,如何修改代码才能在闭包内访问外部变量?
                for (let j=0, _len=_obj.length;j<_len;j++) {
                    if (this.organformId === _obj[j].organguid) {
                         console.log(this.organformId)
                        _obj[j].organname = datas[0].organName
                        _obj[j].organtype = datas[0].organType
                        _obj[j].organDesc = datas[0].organDesc
                    } else {
                        if  (_obj[j].children!=null&&_obj[j].children.length>0) {
                             arguments.callee(_obj[j].children);
                        }
                    }
                }
            })(data[i].children)
        }
    }
代码逻辑及数据均没有问题,只是闭包内部访问不到外部变量?怎么改代码?
阅读 6.1k
2 个回答

最简单的就是外部存一个变量
var _this = this

(function () {
    console.log(_this.organformId)
    ....
})(data[i].children)
var b = {};
b.name = 'zhang';
b.age = '18';
b.method = function(){
    console.log(this.name); //zhang
    let self =this;
    (function(self){
        console.log(self.name);//zhang
        console.log(self.age);//18
        console.log(this.name);//undefined
        console.log(this.age);//undefined
    })(self);
}
b.method();

希望从中理解,望采纳!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题