You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:52