为什么jQuery's每个循环的函数都保存对元素对象的引用
Why jQuery's each loop’s function saves a reference to an element object
最近我发现jQuery在each
循环的函数中保存了一个变量,如果它是用jQuery对象引用设置的。例如,下面的$elem
值在每个方法的第二次和第三次迭代期间保持不变,它指的是第一个div.
$("div").each(function(index) {
//below $elem is initialized with div reference during first iteration
if (index === 0)
$elem = $(this);
var text = "index: <span>" + index + ",</span> <span>$(this).html():</span> <span>" + $(this).html() + ",</span><span> elem.html():</span> <span>" + $elem.html() + "</span>";
$("#output").append("<li>" + text + "</li>");
});
li span {
color: blue;
}
li span:nth-child(2) {
color: red;
}
li span:nth-child(4) {
color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>1 DIV</div>
<div>2 DIV</div>
<div>3 DIV</div>
<br />jQuery each loop's output:
<ul id="output"></ul>
在each
循环的第二次迭代中,$elem
没有变成null
或undefined
,这让我有点惊讶。根据该行为,输出在每三行上都有文本:1 DIV。有人知道为什么$elem
在每个方法的第二次和第三次迭代中引用第一个div
吗感谢
有人知道为什么$elem在每个方法的第二次和第三次迭代中引用第一个div吗?
因为您在第一次迭代中设置了全局变量$elem
,而该变量以后再也不会更改。因此,在循环中以及循环完成后,该变量将指向第一个div
jQuery对象。
永远不要忘记用var
关键字声明变量。未声明但已初始化的变量变为全局变量。正如你所看到的,这可能会导致混乱和错误。
这是因为变量在默认情况下没有词法作用域。如果它被宣布为
var $elem
相反,每次运行函数时,它都会重置为undefined。
有关详细信息,请参阅变量语句开发人员页面。
相关文章:
- 正在保存JavaScript内部回调函数中的值
- OrientDB javascript函数;保存“;在getDataBase上不工作
- 保存淘汰函数时如何处理原型
- 我的函数不会返回要保存在数组中的对象
- 如何调用javascript函数以及将表单数据保存到html页面中的文本文件中
- Async.waterfall 函数在保存解析对象后退出
- 如何将socket.on中函数的值保存为全局变量
- 如何在循环中调用Promise函数并保存其返回值
- 为什么jQuery's每个循环的函数都保存对元素对象的引用
- 将函数的值保存在返回随机值的变量中
- 设置超时可以保存我的循环函数不被视为无响应
- 获取保存函数实例的变量的名称,在此函数中
- 调用保存到附加了事件处理程序的变量的函数
- 函数保存JS对象不工作
- 从jQuery ajax函数保存响应
- Map函数保存后不执行
- 将函数保存到对象
- 如何使用jQuery's .data()函数保存两个变量?
- 使用JavaScript函数保存表单并在浏览器中向后导航
- 将函数保存在数组中,并检索其索引