【发布时间】:2017-07-12 02:38:02
【问题描述】:
有什么更高效的方式来分配事件?
不考虑代码质量,因为它是一种基于意见的事情。
委托绑定+数据属性
var o = [{ key: "1", value: "one" }, { key: "2", value: "two" }, { key: "3", value: "three" }];
var $container = $("#container");
$.each(o, function() {
$("<button/>").text(this.key).data("value", this.value).appendTo($container);
});
$(document).on("click", "button", function() {
console.log($(this).data("value"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
</div>
单个直接绑定 + 封闭值
var o = [{ key: "1", value: "one" }, { key: "2", value: "two" }, { key: "3", value: "three" }];
var $container = $("#container");
$.each(o, function() {
var x = this;
$("<button/>")
.text(x.key)
.click(function() {
console.log(x.value);
})
.appendTo($container);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
</div>
如果我们使用第一种方法,那么我们会因为委托事件处理程序而获得一些性能,但会因为我们正在创建一个 jQuery 对象并读取数据属性而损失一些性能。
第二种方法会占用更多内存吗?
【问题讨论】:
标签: javascript jquery performance binding