gpt4 book ai didi

javascript - 如何更改闭包干扰 JavaScript 中的预期结果?

转载 作者:行者123 更新时间:2023-11-30 17:41:14 25 4
gpt4 key购买 nike

我有一个基本的闭包/“使用闭包”JavaScript 问题。

我在函数和两个 for 循环内有一个 Ajax 调用,我想用一个等于循环内的变量的变量进行调用。 matches_date 被设置为一个 JavaScript 日期,带有自定义修改的 setTime(),每次循环时都不同。在内部循环中,我有:

jQuery('.hide-instance').click(function(event)
{
jQuery.ajax('/save/hide/instance', {'complete': function()
{
jQuery.ajax('/load/calendar', {'complete':
DASHBOARD.load_calendar_from_ajax, 'type': 'POST'});
}, 'data':
{
'id': element.id,
'date': matches_date.toDateString()
}, 'type': 'POST'});
});

这足以预料到,这会导致隐藏实例复选框调用散列中带有“date”的函数等于循环中最后一次运行循环调用 toDateString() 循环中 matches_date 的最后一个值。

我试过将 matches_date.toDateString() 复制到函数之前声明的 var,但效果不一样。

如何更改我的代码,以便字典中的“日期”填充有定义它的循环迭代的 toDateString() 值?

--编辑--

上面引用的调用是在函数内的两个嵌套循环中:

DASHBOARD.load_calendar = function(json)
{
console.log('Loading calendar...');
DASHBOARD.calendar_entries = JSON.parse(json);
var last_unique_event = 0;
var is_unique = false;
var last_day_displayed = '';
jQuery('#display').html('');
for(var days_difference = 0; days_difference - last_unique_event <
DASHBOARD.calendar_days; ++days_difference)
{
var matches_date = new Date();
matches_date.setTime(matches_date.getTime() + days_difference * 24 * 60 *
60 * 1000);
for(var index = 0; index < DASHBOARD.calendar_entries.length; ++index)
{

附言我看到了一种在我自己构建的代码上使用 eval() 来完成此操作的方法,因此它不会是在不受信任的代码上使用 eval(),但通常情况下,如果我看到做某事的唯一方法是使用 eval( ),在 99% 的情况下,这是尝试找到做某事的正确方法的线索。

最佳答案

通过添加闭包:

for(...){
var matches_date = ...
(function(matches_date){ //This line does the magic!
jQuery('.hide-instance').click(function(event)
{
jQuery.ajax('/save/hide/instance', {'complete': function()
{
jQuery.ajax('/load/calendar', {'complete':
DASHBOARD.load_calendar_from_ajax, 'type': 'POST'});
}, 'data':
{
'id': element.id,
'date': matches_date.toDateString()
}, 'type': 'POST'});
});
})(matches_date); //This one, too
}

由于 javascript vars 范围是函数级的,我们在循环内添加一个函数(闭包),它有自己的 matches_date var(作为参数)。这样就不会共享 var,并且每个循环都有自己的副本,因此不会被覆盖。

干杯,来自玻利维亚拉巴斯

关于javascript - 如何更改闭包干扰 JavaScript 中的预期结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21048740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com