gpt4 book ai didi

jquery - 使用 jQuery 的 .each() 时,JSLint 的循环内函数错误如何应用?

转载 作者:行者123 更新时间:2023-12-01 00:08:58 25 4
gpt4 key购买 nike

我正在使用 for 循环内部的 jQuery .each() 调用,该调用使用匿名函数。 JSLint 出现警告“不要在循环内创建函数”。

这是一个更大函数的代码片段 - 本质上它是在检查游戏中的每个玩家是否仍然“活着”(棋盘上至少有一个棋子)。

for( i=0 ; i<PLAYERLIMIT ; ++i ) {
if( player[i].status !== 0 ) { //skip already dead players
var stillAlive = false;
$board.find("td").each( function() { //this func causes JSLint warning
if( $(this).data("owner") === player[i].number ) {
stillAlive = true;
return false;
}
});
if( !stillAlive ) {
//... action to take for dead players
}
}
}

我可以看到如何删除此警告 - 只需单独声明该函数并调用它即可。但这是一个非常小的一次性函数,本质上我认为这是一个嵌套 for 循环的主体,(我本质上是将 .each() 调用读为类似 for $("td") in $board {})

这个 JSLint 是否提供了其风格警告之一,还是更严重?
基本上,我最好解决这个问题吗?

我想了解警告的原因,因此任何有关警告存在原因的评论都会有用(我再次想知道它是否实用或风格)。

最佳答案

这主要只是一个风格问题,可能在 IE 中提高了一些效率,尽管较新的 JS 引擎无论如何都会通过其跟踪引擎内联该函数。您可以像这样摆脱 JSLint“错误”:

function setupPlayer(player) {
var stillAlive = false;
$board.find("td").each( function() {
if( $(this).data("owner") === player.number ) {
stillAlive = true;
return false;
}
});
if( !stillAlive ) {
//... action to take for dead players
}
}

for(var i=0 ; i<PLAYERLIMIT ; ++i ) {
if( player[i].status !== 0 ) { //skip already dead players
setupPlayer(player[i]);
}
}

应该你吗?就我个人而言,为了可维护性,在这种情况下我会忽略它,您当前的版本对我来说更容易阅读/维护。。您来电,哪个版本更适合?无论哪种方式都可能对性能产生很小的影响。

<小时/>

有点切线但相关:
对性能影响更大的是缓存 <td>选择器,DOM遍历是相当昂贵的。我会在你的 for 之前执行此操作循环:

var cells = $board.find("td");

并使用cells在循环内,无需再次查找相同的元素:)

关于jquery - 使用 jQuery 的 .each() 时,JSLint 的循环内函数错误如何应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438895/

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