1

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

var $me = $(this);

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

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

3 回答 3

1

您永远不应该$me在全局定义的情况下实现您的第二个选项,但在每个本地函数中都被覆盖。这是灾难的秘诀。如果一个函数调用另一个函数(或触发事件处理程序),$me将被覆盖并从第一个函数中的正确值中被淘汰。不 - 不要这样做。

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

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

var $me = $(this);

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

于 2012-04-26T23:06:43.417 回答
0

我能想到的保持变量本地化和使其全局化之间的唯一区别是你污染了全局空间。

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

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

相反,以防止范围$me真正全球化。

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

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

于 2012-04-26T22:47:35.010 回答
0

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

{
   foo: function() {
     var me = this;
     setTimeout(function() {
       me.bar();
     }, 1000);
   },
   bar: function() {
   }
}
于 2012-04-26T22:49:47.520 回答