如何在jQuery的$.each循环中访问外部变量f?
在$.each循环中访问外部变量
f的解决方案 看起来你是想在jQuery的$.each循环回调里访问外部定义的变量f对吧?其实按照JavaScript的作用域规则,你本来就可以直接访问它——只要没在循环回调里重新声明同名变量覆盖它就行。
最简单的解决方案:直接访问
你的代码里f是定义在$.each之前的外部作用域变量,回调函数作为内部函数天然有权访问这个变量,直接在回调里使用f即可:
var f = obj instanceof QuadTable ? _.find(obj.tableCols, {data: arr[2]}) : $("#" + frm + ' input[name=' + arr[0] + ']'); $.each(arrTags, function (i, item) { // 直接访问外部的f,比如打印验证 console.log(f); // 你的原有代码逻辑 var arr=$(item).data('filter').split(":") var y = obj instanceof QuadTable ? _.find(obj.tableCols, {data: $.trim(arr[0])}) : $("#" + frm + ' input[name=' + $.trim(arr[0]) + ']'); if (y.complexList || (y instanceof $ && y.hasClass("complexList"))) { var keys = obj.returnListKeys(y); var values = []; debugger; _.map(keys, function (name, i) { debugger; var k = _.findIndex(obj.dbColumns, {'db': name}); values = arr[1].split('@'); obj.dbColumns[k]["prv_value"] = values[i]; obj.dbColumns[k]["nxt_value"] = values[i]; }); } });
如果还是访问不到?排查这两个问题
如果上面的方式不行,大概率是以下两种情况:
问题1:回调内部重新声明了同名变量
f
检查你的$.each回调函数里,有没有写var f、let f或者const f——内部的同名变量会屏蔽外部的f,导致你访问的是内部未赋值的变量。解决办法就是删掉内部的f声明。问题2:
f的作用域比预期更小
如果f是定义在某个未贴出的内层函数里,导致$.each回调不在它的作用域链中,可以用闭包来保存f的引用:var f = obj instanceof QuadTable ? _.find(obj.tableCols, {data: arr[2]}) : $("#" + frm + ' input[name=' + arr[0] + ']'); // 用闭包包裹$.each,把f作为参数传入 (function(outerF) { $.each(arrTags, function (i, item) { // 这里用outerF访问外部的f console.log(outerF); // 原有代码... }); })(f);
内容的提问来源于stack exchange,提问作者Leonel Matias Domingos
相关产品推荐
相关产品推荐

