[英]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.