繁体   English   中英

jQuery定义了$(this)变量以在许多函数中重用

[英]Jquery defining a $(this) variable for reuse in many functions

我在javascript文件中大约有10个函数。 每个函数的开头都有以下语句:

var $me = $(this);

在全局范围内定义$me然后在每个函数的开头重新定义它会更好吗? 还是没有任何区别? 例如...

var $me;
function doo() {$me = $(this)}
function foo() {$me = $(this)}
// etc. etc.

绝对不要用全局定义的$me来实现第二个选项,而应在每个局部函数中覆盖它。 那是灾难的秘诀。 如果一个函数调用另一个函数(或触发事件处理程序),则$me将被覆盖,并且会从第一个函数的适当值中删除。 否-请勿这样做。

正确的方法是在使用它的每个函数中定义一个NEW局部变量。这既快捷又不容易覆盖错误。 仅供参考,局部变量比全局变量访问更快。

如果您需要在函数中保存$(this)的副本,请输入:

var $me = $(this);

靠近函数顶部(在函数主体内部),因此它是一个临时局部变量。

我可以想到的是,将变量保留为局部变量并将其设置为全局变量之间的唯一区别是,您会污染全局空间。

如果出于某种原因您更喜欢全局,我建议您这样做

(function() {
    var $me;
    function doo() { $me = $(this); }
})();

而是要防止$me的范围真正全球化。

但是,一个重要的考虑因素是,如果仅声明了一个$me ,并且调用另一个也设置了$me函数,则会遇到麻烦。

最后, $me本地化更有意义 ,因为它仅适用于它所在的函数。函数调用之外的$me是谁?

如果这些是全局函数,则可能根本不需要“ me”变量。 此构造通常用于对象的成员函数中。 当您定义一个将由其他人调用的函数,但是该函数需要引用原始对象时,这很有用。 例如,在这里我们定义一个匿名函数,它将被setTimeout调用:

{
   foo: function() {
     var me = this;
     setTimeout(function() {
       me.bar();
     }, 1000);
   },
   bar: function() {
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM