js函数对象
js函数对象一、常用的定义函数的写法
1、声明式的
写法:function func(param1,param2…){…};
2、对象式的(构造函数)
写法:var func =new Function("param1","param2",..."function body");
例子:var sayHi=new Funciton("toWhom","alert('hi'+toWhom)");
3、字面量式
写法:var func=function [函数名可选,函数内可见](parms){...};
例子:var func=function funcTest(id){alert(id)}
说明:这种写法的函数名,只有在函数体内可见,可用于实现递归函数。
二、函数对象
函数的本质是一个内部对象,由JavaScript解释器决定其运行方式。注意可直接在函数声明后面加上括号就表示创建完成后立即进行函数调用,例如:
var i=function (a,b){
return a+b;
}(1,2);
alert(i);
在JavaScript中,函数对象对应的类型是Function,正如数组对象对应的类型是Array,日期对象对应的类型是Date一样,可以通过new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象。
三、几种函数定义的使用比对
1、下面这段语句将产生func未定义的错误
func();
var func=function(){
alert(1)
}
2、但是下面两种方式能够正确调用
func();
function func(){
alert(1)
}
func();
var someFunc=function func(){
alert(1)
}
三、函数对象和其他内部对象
除了函数对象,还有很多内部对象,比如:Object、Array、Date、RegExp、Math、Error。这些名称实际上表示一个类型,可以通过new操作符返回一个对象。然而函数对象和其他对象不同,当用typeof得到一个函数对象的类型时,它仍然会返回字符串“function”,而typeof一个数组对象或其他的对象时,它会返回字符串“object”。
例如
alert(typeof(Function))); // “function”
alert(typeof(new Function())); // “function”
alert(typeof(Array)); // “function”
alert(typeof(Object)); // “function”
alert(typeof(new Array())); // “object”
alert(typeof(new Date())); // “object”
alert(typeof(new Object())); // “object”
可见new一个function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。