以下形式的函数定义有什么区别:
$.myFunction = function() {
//function body
};
var myFunction = function() {
//function body
};
$(myFunction = function() {
//function body
});
答案 0 :(得分:4)
首先向myFunction
添加一个函数$
,它可以是任何使用$
的 jQuery,mooTools,Prototype 等JavaScript库。内部。
在第一个函数中,您只是将自己的函数添加到$
指定的javascript库中。
第二个是功能表达,与功能声明相反,具有以下形式:
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
})();
请注意,自我调用函数会在解析后立即运行,因为()
会签名。
答案 1 :(得分: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
myFunction
的全局变量的函数。该变量是全局变量,因为您没有使用var
关键字。一般来说,你可能不想使用全局变量,当然,当它的定义不是很明显时也不会。第二步是(假设您正在使用jQuery)将myFunction
传递给jQuery,以便在DOM完成加载时执行。有关详细信息,请参阅jQuery documentation。
将函数传递给jQuery而不将其赋值给任何变量更为常见,即
$(function() {
//function body
});
答案 2 :(得分:0)
其实只有其中一个是我称之为功能定义的,第二个。第一个是使用该函数扩展全局jQuery对象(或使用美元符号的任何其他库),第三个是奇怪的。
答案 3 :(得分:0)
假设“$”代表jQuery(这里看起来很明显),第三种语法定义了一个匿名函数并将其作为参数传递给jQuery,这是一个为jQuery.DocumentReady注册回调的快捷方式。 p>