【转载】javascript中的函数对象
原文地址:http://www.cnblogs.com/phpzxh/archive/2009/09/16/1568137.html【侵删】
在javascript中函数的申明方式有四种 下面代码中一句代表了一种
1 function func1(…){…}
2 var func2=function(…){…};
3 var func3=function func4(…){…};
4 var func5=new Function();
2 var func2=function(…){…};
3 var func3=function func4(…){…};
4 var func5=new Function();
第一种就是我们常见的函数申明方式,函数名为func1。第二种和第三种的区别是第二种是匿名函数,而第三种不是。第四种用的是对象申明的方式,因为javascript每个函数就是一个对象。
1 //这两种声明是等价的
2 function func1(a,b){
3 return a+b;
4 }
5 var func1 = new Function("a","b","return a+b");
2 function func1(a,b){
3 return a+b;
4 }
5 var func1 = new Function("a","b","return a+b");
匿名函数和有名字函数在javascript中是有点区别的我们看代码
1 //声明一个匿名函数
2 func1();
3 var func1 = function(){
4 alter(1);
5 }
2 func1();
3 var func1 = function(){
4 alter(1);
5 }
运行火狐
firbug中说func1未定义
看看另外一种方式
1 func1();
2 function func1(){
3 alert(1);
4 }
2 function func1(){
3 alert(1);
4 }
由此可见,尽管JavaScript是一门解释型的语言,但它会在进行函数调用时,检查整个
代码中是否存在相应的函数定义,这个函数名只有是通过 function funcName()形式定义的才有效,而不能是匿名函数。
匿名函数的申名方式有个好处就是防止函数重命名。在javascript还有匿名函数可以在申明之后立即调用,代码如下。
1 var i=function(a,b){
2 return a+b;
3 }(1,2);
2 return a+b;
3 }(1,2);
这里i=3是返回值而不是函数,这是因为()的优先级比=高
在jquery中的插件扩展就是这样实现的,我们来看看代码。
2
3 $.fn.select = function(select) {
4 if (select == undefined) select = true;
5 return this.each(function() {
6 var t = this.type;
7 if (t == 'checkbox' || t == 'radio')
8 this.checked = select;
9 else if (this.tagName.toLowerCase() == 'option') {
10 var $sel = $(this).parent('select');
11 if (select && $sel[0] && $sel[0].type == 'select-one') {
12 // deselect all other options
13 $sel.find('option').select(false);
14 }
15 this.selected = select;
16 }
17 });
18 };
19
20 })(jquery)
注意直接这样写
function(a,b){
return a+b;
}(1,2)
是会报语法错误的。