JavaScript函数定义语法总结
作者 黄诚
QQ群:65643887
1.正常的定义方法:
function functionName([arguments]){
Javascript statements
[return expression]
}
例1:
function evalScript( i, elem ) {
if ( elem.src )
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
else
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
if ( elem.parentNode )
elem.parentNode.removeChild( elem );
}
2. 匿名函数
上面的其中的functionName可以省略,成为匿名函数:
var func2 = function(…){…};
例1:
var max = function(a, b){
if(a>b) return a;
return b;
}
例2:
dojo.isString = function(/*anything*/ it){
//summary:
//Return true if it is a String
return !!arguments.length && it != null && (typeof it == "string" || it instanceof String);
// Boolean
}
例3:
function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
}
3.匿名函数加默认参数
(function(){})();语法表示一个匿名函数的定义
例1:
var iii = (function(a,b){return a+b;})(1,2);
alert(iii);
后面的括号(1,2)表示创建完后立即进行这个函数调用。结果是弹出3。它的优点是在很长的代码段中进行模块化设计或者想避免命名冲突,这是一个不错的解决办法。
例2:
(function(){
var mp = dojo.config["modulePaths"];
if(mp){
for(var param in mp){
dojo.registerModulePath(param, mp[param]);
}
}
})();
4.大括号({})语法
JavaScript中的对象其实就是属性(方法)的一个集合,并没有严格意义上类的概念。所以它提供一个简单的方式类创建对应,即:
{
property1:statement,
property2:statement2,
…
propertyN:statementN
}
通过大括号括住多个属性或方法及其定义(这些属性或方法用逗号割开),来实现对象的定义,这段代码就直接定义个具有n个属性或方法的对象,其属性名和其定义之间用冒号(:)隔开。
例1:
this.dojo = {
_scopeName: "dojo",
_scopePrefix: "",
_scopePrefixArgs: "",
_scopeSuffix: "",
_scopeMap: {},
_scopeMapRev: {}
};
//调用dojo对象的属性scopeName
alert(dojo. scopeName);
例2:
jQuery.browser = {
version: (userAgent.match( /.+(?:rv|it|ra|ie)[//: ]([/d.]+)/ ) || [0,'0'])[1],
safari: /webkit/.test( userAgent ),
opera: /opera/.test( userAgent ),
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};
5. new Function创建方式:
var funcName = new Function(p1, p2, …, pn, body);
参数的类型都是字符串,p1到pn表示所创建函数的参数名称列表,body表示所创建函数的函数体语句,funcName就是所创建函数的名称。
可以不指定任何参数创建一个空函数,不指定funcName创建一个无名函数,当然那样的函数没有任何意义。
例1:
下面的定义是等价的
var myFunction = new Function(“a”, “b”, “c”, “return a + b + c”);
var myFunction = new Function(“a, b, c”, “return a + b + c”);
var myFunction = new Function(“a, b”, “c”, “return a + b + c”);
函数里面使用大括号语法。
{
noConflict: function( deep ) {
window.$ = _$;
if ( deep )
window.jQuery = _jQuery;
return jQuery;
}
);
解析。
jQuery首先定义了一个extend函数。
jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
...
};
而jQuery.extend({…});是构造了一个对象作为extend函数的参数进行调用。