定义函数的不同形式
Different forms of defining a function
以下形式的函数定义有什么区别:
$.myFunction = function() {
//function body
};
var myFunction = function() {
//function body
};
$(myFunction = function() {
//function body
});
第一个添加了一个函数myFunction
$
该函数可以是内部使用$
的任何JavaScript库,如jQuery,mooTools,Prototype等。
在第一个函数中,您只需将自己的函数添加到 $
指定的 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
})();
请注意,自调用函数在解析后立即运行,因为()
在其签名末尾。
$.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 文档。更常见的是将函数传递给jQuery而不将其分配给任何变量,即
$(function() { //function body });
实际上只有一个是我所说的函数定义,第二个。第一个是使用该函数扩展全局jQuery对象(或任何其他使用美元符号的库),第三个很奇怪。
假设"$"代表jQuery(这里看起来很明显),第三个语法定义了一个匿名函数,并将其作为参数传递给jQuery,jQuery是注册jQuery.DocumentReady回调的快捷方式。
- 用嵌套函数和默认函数定义函数
- 使用Extjs进行函数定义
- JS中奇怪的函数定义语法
- 重写javascript函数定义
- 使用角度图时,我可以用函数定义数据点颜色吗
- modal.js中的匿名函数定义
- 为从AJAX调用中utlizes DATA参数的函数定义回调
- Emacs:在 etag 中查找函数定义
- Javascript:对象函数定义
- 为什么要在函数定义之外引用静态变量(函数属性)
- Ember 对象函数定义中的计算属性.js
- javascript/jQuery中函数定义的区别
- CoffeeScript 承诺与函数定义链接
- 如何在使用 eval() 评估 JavaScript 时将回调函数定义作为参数传递
- Javascript - 为什么下面的函数定义错误
- 使用函数声明时的自定义函数(也称为惰性函数定义)
- JavaScript 函数定义不正确
- jQuery off on 时是用匿名函数定义的
- 停止 IntelliJ 11 在启用 JSLint 时向每个嵌套函数定义添加“use strict”
- 为什么不是't我为这个函数定义的javascript函数