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 函数的参数进 行调用。