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 = 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循环已经到了下一次循环,或者下几回循环。这样不肯定的行为显然在程序中是不科学的,因此这么写就会报错。函数

 

解决办法:post

一、那就是不要这样写,在循环中不要使用这种带有回调函数的方法。spa

二、写成以下这种形式code

1 for(var j=0; j<temp.length; j++) {     
2    (function(){           
3       ...      
4    })(j) 
5 }

 

好吧就这样了,这两种办法能够应付这种情况了。。。blog

相关文章
相关标签/搜索