我开始在for循环中使用IIFE,如下所示:
<select id="country" name="country">
<option value="usa">USA</option>
<option value="canada">Canada</option>
</select>
<div id="state"></div>
$(function(){
$("#country option").click(function(){
$(this).each(function(){
if($(this).val()=="canada") {
$("#state").html('<select id="province" name="province"><option value="">Please select your province...</option></select>');
console.log('Canada baby!');
}
});
});
});
我这样做的主要原因是为for循环提供了一些范围,因此变量不会逃避此范围。这样做是否有任何负面影响/表现?如果是这样,他们受到的伤害程度如何?谢谢!
答案 0 :(得分:3)
是的,将for
语句的正文包装到匿名函数中会产生性能成本。问题是为每次迭代创建新函数对象的成本。也就是说,对于每次迭代,都会创建一个具有自己范围的新函数对象。
Performance comparison named vs anonymous function 这是命名函数和函数声明之间的一个小比较,它可以帮助您理解对代码性能的影响。请注意,在您的情况下,问题不是匿名函数,而是创建函数对象的成本。
<强> ES6 强>
我理解,您正在尝试将变量范围限定为for
。我建议另一个解决方案来实现这一目标。如果可以,请尝试使用ES6中的let关键字。
我们引入了let
关键字来克服var
的所有缺陷,例如此缺陷。 let
允许您声明范围受限于for
块的变量。
let
允许您声明范围有限的变量 使用它的块,语句或表达式。这与此不同 var关键字,它全局定义变量,或者本地定义变量 整个函数,无论块范围如何。