为何jQuery $.each()函数返回值不符合预期?
问题:jQuery $.each()迭代导致函数返回值不符合预期
现象描述
编写的jQuery函数无法返回预期值:控制台打印出"FOUND",说明已匹配到目标项,但函数最终返回false;改用原生for循环实现相同逻辑,却能正常返回目标值。且确认$.each()是同步执行的,控制台输出顺序正常。
有问题的$.each()实现代码
function getValueFromSettingArray(array,key){ if(array && array.length > 0){ console.log("Setting Array Greater Than 0",array); $.each(array, function(index,item){ console.log(index,item); if(item.name == key){ console.log("FOUND",item.value); return item.value; } }); } return false; }
正常的for循环实现代码
function getValueFromSettingArray(array,key){ if(array && array.length > 0){ console.log("Setting Array Greater Than 0",array); for(let i=0; i < array.length; i++){ let item = array[i]; console.log("item loop " + i, item); if(item.name == key){ console.log("FOUND",item.value); return item.value; } } } return false; }
问题根源
核心错误是混淆了$.each()迭代回调的return作用范围:
- 在
$.each()的回调函数里,return item.value并不是返回给外层的getValueFromSettingArray函数,而是返回给$.each()方法本身。$.each()会根据回调的返回值决定是否继续迭代——返回false终止迭代,返回其他值则继续,但这个返回值不会传递到外层函数。 - 因此,外层函数在执行完
$.each()后,会继续执行到末尾的return false,最终返回false。 - 而for循环中的
return是直接作用于外层函数,找到匹配项后会立刻终止函数并返回目标值,所以符合预期。
补充说明:此问题曾被标记为重复,但核心并非询问数组取值方法,而是探究结果不符合预期的原因,经提示后明确了回调函数return的作用范围才是问题关键。
内容的提问来源于stack exchange,提问作者jjonesdesign
相关产品推荐
相关产品推荐

