在jquery函数上使用本地引用还是此?(javascript)
哪种解决方案更好在jquery函数上使用本地引用还是此?(javascript),javascript,jquery,Javascript,Jquery,哪种解决方案更好 var handleDateChange = function () { var dateBtn = $('#dateBtn'); dateBtn.on('changeDate', function () { var dateValueStr = dateHelper.getFormattedDate(dateBtn); dateBtn
var handleDateChange = function () {
var dateBtn = $('#dateBtn');
dateBtn.on('changeDate', function () {
var dateValueStr = dateHelper.getFormattedDate(dateBtn);
dateBtn.text(dateValueStr);
$.when(//Something is running)
.done(function () {
dateBtn.DoSomething();
});
dateBtn.datepicker('hide');
});
};
当我们使用dateBtn
变量时,它总是按id再次搜索元素吗?
或者在某些地方使用更好的解决方案$(此)
:
当你这样做的时候
var dateBtn = $('#dateBtn');
元素的搜索会立即进行,不会再次进行。因此缓存jQuery对象是有效的
但您并不真正需要这种缓存,除非您确认存在性能问题。使用$(this)
,假设它是相同的元素,会更清晰。版本$(this)
更好,因为它更灵活,更可重用。使用第一种方法是不可取的,因为代码与dateBtn
变量紧密耦合
考虑一下,如果您将来回到代码,并且希望将事件处理程序分配给其他元素,而不仅仅是dateBtn
。使用第一种方法,您必须将所有dateBtn
更改为this
方法,或者复制整个代码并使用不同的变量。使用this
方法,您所要做的就是对其他元素调用完全相同的代码
性能上的差异可以忽略不计,因为$(this)
不是重新选择元素,而是在现有的普通DOM元素周围添加jQuery包装器。通过将jQuery对象存储在下面这样的变量中,并引用$This
而不是反复创建新的jQuery对象,可以很容易地解决这个问题:
$this = $(this);
旁注:您的第二个代码在promise中仍然引用了dateBtn
,因此它仍然依赖于dateBtn
变量。要解决此问题,可以创建闭包并传递目标对象
$this = $(this);