函数应该在jQuery的扩展内部还是在外部?

时间:2015-05-27 08:48:56

标签: javascript jquery function jquery-plugins

我正在编写我的第一个jQuery插件,而且我不完全确定内部扩展声明应该是什么,

$.fn.myplugin = function () {
    var somevar = this;
    someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};

OR

$.fn.myplugin = function () {
    var somevar = this;
    someFunc(somevar);
    function someFunc() {/*doSomethin'*/};
};

2 个答案:

答案 0 :(得分:9)

  

我会使用第一个选项,因为:

     

它没有任何负面影响。

那就是你错了。如果您正在使用不同的库,您可能会覆盖别人的某些功能someFunc(),可能会破坏他们为您做的任何事情。更安全的方法是在代码周围包装一个闭包。

(function(){

$.fn.myplugin = function () {
    var somevar = this;
    someFunc(somevar);
};

function someFunc() {/*doSomethin'*/};

/* Do whatever other things you need someFunc/myplugin for */

})();

这样你的someFunc就会被全局命名空间屏蔽。

或者您可能要做的是将对象的方法暴露给外界。举几个例子:

$.fn.dog = function () {

     this.bark = function() {alert("Woof");};

     return this;
};

var $max = new $('#myDogMax').dog();
$max.bark();

这使函数保持在对象的上下文中,但可以从外部干净地访问它。虽然这通常意味着该方法以某种方式与对象相关。在全局范围内编写一个bark()函数是没有意义的,因为它通常是狗,而不是浏览器窗口。

答案 1 :(得分:5)

在您的第一种方法中,您最终会污染添加someFunc()的全局范围。第二种方法没有。

然而,这并不意味着第二种方法更好。如果你将第一个方法括在一个闭包中,它基本上就是完全相同的东西,并归结为个人偏好 在这里,使用第一个方法(在闭包中)可能更好,因此如果在单个JS文件中有多个jQuery扩展,它们可以共享此基本函数。