首页 > 代码库 > mutable variable accessible from closure
mutable variable accessible from closure
在写解析表达式的时候由于循环遍历从表达式截取下来的字符串数组,再加上要在商品列表中做相应的筛选。就是从一个商品列表中筛选出符合条件的商品进入到下一次筛选,于是我想到了用underscore里边的filter方法来减少代码,如下:
1 for (var j = 0; j < temp.length; j++) { 2 if (temp[j].indexOf("==") != -1) { 3 temp[j] = temp[j].replace(/[‘]/g, ""); 4 var the_key = temp[j].split("==")[0]; 5 var the_value = http://www.mamicode.com/temp[j].split("==")[1]; 6 _.filter(item_list, function (item) { 7 return has_the_property(item.properties, the_key, the_value) 8 }) 9 10 } else if (temp[j].indexOf("<") != -1) { 11 } else if (temp[j].indexOf(">") != -1) { 12 } 13 }
就是这种在一个for循环中嵌套一层带有回调函数的方法,这个时候以上蓝色加粗的变量 the_key,the value就会被提示mutable variable accessible from closure,大概是在这个关闭中有会发生改变的变量。因为有一个回调函数,而回调函数并不会顺序的被执行,也就是可能回调函数还没执行for循环已经到了下一次循环,或者下几次循环。这样不确定的行为显然在程序中是不科学的,所以这么写就会报错。
解决办法:
1、那就是不要这样写,在循环中不要使用这种带有回调函数的方法。
2、写成如下这种形式
1 for(var j=0; j<temp.length; j++) { 2 (function(){ 3 ... 4 })(j) 5 }
好吧就这样了,这两种办法可以应付这种状况了。。。
mutable variable accessible from closure
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。