2012-04-26 39 views
1

我在JavaScript文件中有大约10个函数。在开始的每个功能有如下语句:

var $me = $(this); 

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

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

不,这不会更好。没有理由为什么'$ me'应该在函数之间“共享”,每个函数都有自己的'$ me',所以在本地是有意义的。此外,更长的范围链使得变量查找更慢(理论上)。 – 2012-04-26 22:48:45

+0

我会投票反对全球范围。为了便于阅读,以及如果您计划稍后将功能分解为模块。 – Christophe 2012-04-26 22:50:00

回答

1

你应该永远不会实现你与全局定义$me秒选项,但覆盖在每一个地方的功能。这是一场灾难。如果一个函数调用另一个函数(或触发一个事件处理程序),则$me将被覆盖,并且会在第一个函数中受到适当的影响。不 - 不要这样做。

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

如果你需要的$(本)在函数中保存的副本,然后放:

var $me = $(this); 

附近的函数(函数体内)的顶部,这是一个临时的局部变量。

0

我可以想到保持变量局部和使其成为全局之间的唯一区别是你污染了全局空间。

如果你喜欢它的全球无论出于何种原因,我建议做

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

代替,以保持$me范围被真正的全球性。

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

最后,更有意义$me是局部的,因为它仅适用于它在功能,谁是$me函数调用之外?

+0

我仍然投票不这样做。 'var $ me = $(this)'很简单,不需要它是全局的,或者这个问题是没有意义的。 – 2012-04-26 22:49:20

0

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

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

看起来更像是函数用作事件处理程序或其他jQuery方法回调函数,其中'this'引用DOM元素。避免一遍又一遍调用'$(this)'是有道理的。 – 2012-04-26 22:51:37

相关问题