这是你如何在jQuery中定义一个函数?

Bla*_*man 48 javascript jquery

这是你如何在jQuery中定义一个函数?

$(document).ready( function () {
    var MyBlah = function($blah) { alert($blah);  };
 });
Run Code Online (Sandbox Code Playgroud)

现在调用我做的函数:

MyBlah('hello');
Run Code Online (Sandbox Code Playgroud)

Pab*_*dez 93

首先,你的代码是有效的,这是在JavaScript中创建函数的有效方法(jQuery除外),但是因为你在另一个函数中声明一个函数(在这种情况下是一个匿名函数),"MyBlah"将无法从全球范围.

这是一个例子:

$(document).ready( function () {

    var MyBlah = function($blah) { alert($blah);  };

    MyBlah("Hello this works") // Inside the anonymous function we are cool.

 });

MyBlah("Oops") //This throws a JavaScript error (MyBlah is not a function)
Run Code Online (Sandbox Code Playgroud)

这是(有时)一种理想的行为,因为我们不会污染全局命名空间,所以如果你的函数不需要从代码的其他部分调用,那么这就是你要走的路.

在匿名函数之外声明它将它放在全局命名空间中,并且可以从任何地方访问它.

最后,不需要变量名称开头的$,有时当变量是jQuery对象本身的实例时(在这种情况下不一定),它有时用作jQuery约定.

也许你需要的是创建一个jQuery插件,这非常简单和有用,因为它可以让你做这样的事情:

$('div#message').myBlah("hello")
Run Code Online (Sandbox Code Playgroud)

另见:http://www.re-cycledair.com/creating-jquery-plugins


geh*_*kky 44

不,你可以把函数写成:

$(document).ready(function() {
    MyBlah("hello");
});

function MyBlah(blah) {
    alert(blah);
}
Run Code Online (Sandbox Code Playgroud)

这会调用MyBlah内容准备好的功能.


Dmi*_*kov 16

没有.

您可以使用与常规javascript完全相同的方式定义函数.

//document ready
$(function(){
    myBlah();
})

var myBlah = function(blah){
    alert(blah);
}
Run Code Online (Sandbox Code Playgroud)

另外:不需要$


小智 8

您可以扩展jQuery原型并将您的函数用作jQuery方法.

(function($)
{
    $.fn.MyBlah = function(blah)
    {
        $(this).addClass(blah);
        console.log('blah class added');
    };
})(jQuery);

jQuery(document).ready(function($)
{
    $('#blahElementId').MyBlah('newClass');
});
Run Code Online (Sandbox Code Playgroud)

有关扩展jQuery原型的更多信息,请访问:http://api.jquery.com/jquery.fn.extend/