gpt4 book ai didi

jquery - 为什么变量包装在 setTimeout 中时不传递

转载 作者:行者123 更新时间:2023-12-01 06:17:00 26 4
gpt4 key购买 nike

如果intervalIsClear为true,则hoveredItemIndex将正确拾取LI元素的索引。

如果intervalIsClear为假,则hoveredItemIndex在setTimeout()内声明,但返回-1。为什么一旦封装在 setTimeout() 中就找不到索引?

function()
{
if (intervalIsClear == true){

hoveredItemIndex = $('.menu li').index(this);
changeToHoverText();
} else {
hello = setTimeout(function(){
hoveredItemIndex = $('.menu li').index(this);
alert (hoveredItemIndex);
changeToHoverText();
},500);
}
}

最佳答案

这是因为当执行该函数时,setTimeout 的回调会更改该方法的执行上下文。这意味着 setTimeout 回调内部和外部的 this 变量指向不同的对象。

使用$.proxy手动分配回调方法的执行上下文

function () {
if (intervalIsClear == true) {

hoveredItemIndex = $('.menu li').index(this);
changeToHoverText();
} else {
hello = setTimeout($.proxy(function() {
hoveredItemIndex = $('.menu li').index(this);
alert(hoveredItemIndex);
changeToHoverText();
}, this), 500);
}
}

关于jquery - 为什么变量包装在 setTimeout 中时不传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300793/

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