javascript - jQuery 函数中 "this"的范围

标签 javascript jquery arrays

今天我遇到了一个非常有趣的问题,很多人可能觉得这个问题很简单,但由于我刚刚学习使用 jQuery,所以我很想知道它是如何工作的。

我有两个数组,我正在迭代数组的元素。一个数组是 arrAllDetailsConstantData,另一个数组是 arrAllDetails。我想使用 arrAllDetailsConstantData 进行比较,并使用 arrAllDetails 进行更新

我正在使用嵌套循环。但发生的情况是,在更新数组 arrAllDetails 时,数组 arrAllDetailsConstantData 也在更新。我认为这在某种程度上与父级 this 的范围有关(尽管我只是猜测)。你能帮我解决这个问题吗?

这是我的代码:

$.each(privateVariables.arrAllDetailsConstantData, function() {
    if (this.AssociationId == value && this.uniqueChargeAttr == uniqueChargeAttr) {

        if (this.Units == $("#txtUnits").val() &&
            this.Modifier1 == $("#txtModifier1").val() &&
            this.Modifier2 == $("#txtModifier2").val() &&
            this.Modifier3 == $("#txtModifier3").val() &&
            this.Modifier4 == $("#txtModifier4").val() &&
            this.DxOption == $("#ddlDxOption").val() &&
            this.DxCode1 == $("#txtDx1").val() &&
            this.DxCode2 == $("#txtDx2").val() &&
            this.DxCode3 == $("#txtDx3").val() &&
            this.DxCode4 == $("#txtDx4").val()) {

        } else {
            $.each(arrAllDetails, function() {
                if (this.AssociationId == value && this.uniqueChargeAttr == uniqueChargeAttr) {
                    this.ActionType = "M";
                    this.CptName = $("#lblCptDesc").text();
                    this.CptDesc = $("#lblCptDesc").text();
                    this.Units = $("#txtUnits").val();
                    this.Modifier1 = $("#txtModifier1").val();
                    this.Modifier2 = $("#txtModifier2").val();
                    this.Modifier3 = $("#txtModifier3").val();
                    this.Modifier4 = $("#txtModifier4").val();
                    this.DxOption = $("#ddlDxOption").val();
                    this.DxCode1 = $("#txtDx1").val();
                    this.DxCode2 = $("#txtDx2").val();
                    this.DxCode3 = $("#txtDx3").val();
                    this.DxCode4 = $("#txtDx4").val();

                    privateVariables.arrActionData.push(this);

                }
            });
        }
    }
});

// test code ends

最佳答案

  • 首先,jQuery 的 this 引用调用元素。

$.each中,它指的是迭代元素

因此,在您的第一个循环中:$.each(privateVariables.arrAllDetailsConstantData, function() {});this将是当前循环元素 arrAllDetailsConstantData 数组。

在第二个循环中,this 将是 arrAllDetails 数组的当前循环元素

  • 其次,我们需要数组创建的代码。

不要忘记,在许多语言中,如果您使用此arrAllDetailsConstantData = arrAllDetails,则对这两个对象的指针引用将指向相同的内存范围

在本例中,请使用 Array.prototype.slice 中的 arrAllDetailsConstantData = arrAllDetails.slice();

关于javascript - jQuery 函数中 "this"的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31160816/

相关文章:

arrays - 在 Swift 5 中将字节数组转换为 Int64

javascript - Omniture/Adobe Analytics 跟踪破坏了 Safari 中的外部链接

javascript - YouTube视频更改上的Javascript

javascript - 为什么 jQuery 不删除所有数据属性?

javascript - 在同一段脚本中使用多个 div id

JavaScript:无法操作由 string.match 生成的数组

c++ - 迭代器比数组 [i] 快吗?

javascript - stripe createToken如何验证卡是否无效?

javascript - node js express 在输入时检测谷歌浏览器的地址栏自动完成

jquery - jQuery/Ajax 加载的 DOM 脚本何时实际执行?