-3

以下形式的函数定义有什么区别:

$.myFunction = function() {
    //function body
};

var myFunction = function() {
    //function body
};

$(myFunction = function() {
    //function body
});
4

4 回答 4

4

第一个添加一个函数myFunction$可以是任何内部使用的 JavaScript 库,例如jQuery、mooTools、Prototype$

在第一个函数中,您只需将自己的函数添加到由$.


第二个是与函数声明相对的函数表达式,它具有以下形式:

function myFunction() {
  //function body
}

第三个看起来很奇怪,但它也是在 JavaScript 库的上下文中使用的函数表达式$,因为无论该库的含义是什么。


要了解更多关于函数表达式和函数声明之间的区别,请查看这篇优秀的帖子:

您需要记住的函数表达式和函数声明之间最重要的区别是函数声明无论在哪里声明都是可用的(因为它们被提升到顶部)而函数表达式只有在它之前或在某个地方定义时才能运行为您以后的代码。一个例子是:

foo1(); // alerts "I am function declaration"
foo2(); // error, undefined function

function foo1() {
 alert('I am function declaration');
}

var foo2 = function() {
  alert('I am function expression');
};

foo1(); // alerts "I am function declaration"
foo2(); // alerts "I am function expression"

仅供参考,还有自调用匿名函数和自调用命名函数:

// self invoking anonymous function
(function(){
  // code
})();

// self invoking named function
(function foo(){
  // code
})();

并且使用这些字符将函数声明转换为函数表达式:

! function(){
  // code
})();

+ function foo(){
  // code
})();

请注意,自调用函数在解析后立即运行,因为()在其签名的末尾。

于 2012-06-30T08:05:04.697 回答
1
$.myFunction = function() {
    //function body
};

这将创建一个函数作为$对象的属性。如果您使用的是 jQuery,那么$它就是全局jQuery对象。你会调用这个函数$.myFunction()


var myFunction = function() {
    //function body
};

这将创建一个分配给名为 的变量的函数myFunction。如果您在另一个函数中执行此操作,则myFunction仅在该范围内可用。


$(myFunction = function() {
    //function body
});

这个是做两件事的,我们把它分解成两个步骤来更清楚:

myFunction = function() {    // step 1
    //function body
};
$(myFunction);               // step 2
  1. 第一步是创建一个分配给名为 的全局变量的函数myFunction。该变量是全局的,因为您没有使用var关键字。一般来说,您可能不想使用全局变量,当它的定义不是很明显时当然也不想使用。
  2. 第二步是(假设您使用 jQuery)传递myFunction给 jQuery 以在 DOM 完成加载时执行。有关更多信息,请参阅jQuery 文档

    将函数传递给jQuery而不将其分配给任何变量更为常见,即

    $(function() {
        //function body
    });
    
于 2012-06-30T08:18:54.980 回答
0

好吧,实际上只有其中一个是我所说的函数定义,第二个。第一个是使用该函数扩展全局 jQuery 对象(或任何其他使用美元符号的库),第三个是奇怪的。

于 2012-06-30T08:06:02.493 回答
0

假设“$”代表 jQuery(这在这里看起来很明显),第三种语法定义了一个匿名函数并将其作为参数传递给 jQuery,这是为 jQuery.DocumentReady 注册回调的快捷方式。

于 2012-06-30T08:11:15.007 回答