Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jquery函数上使用本地引用还是此?(javascript)_Javascript_Jquery - Fatal编程技术网

在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);