Ecmascript 最令人兴奋之处莫过于函数,实际上是功能完整的对象,它是ecmascript 的核心。
Ecmascript函数是不能重载的。例如
function doShow(i){ console.log(i); } function doShow(i){ console.log(i*2); }
调用 do(10) 的时候结果是20 应为第二个do函数会覆盖第一个do函数。
arguments 对象
在函数代码中可以使用一个特殊的对象arguments,开发者无需指定参数名称就可以直接调用参数,例如
function show(){ if(arguments.length==1){ console.log(arguments[0]); }else if(arguments.length==2){ console.log(arguments[1]); } }
当调用show("123"),和调用 show("123","456") 的时候就会参数不同的效果等同于变相实现了函数的重载
Function 类
function 实际上就是功能完整的对象,Function类可以表示开发者定义的任何函数。例如
function show(age,name){ console.log("this age:"+age); console.log("this name:"+name); }
等同于
var show=new Function(age,name){ console.log("this age:"+age); console.log("this name:"+name); }
尽管可以使用Function 构建函数,但是最好不要使用Function 来构建函数,应为他的效率远远低于传统的方式。因为函数是引用类型所以他们也有属性和方法,ecmascript 中定义的属性length 声明了函数期望参数的个数。例如
function fun(f){ } function func(f2){ } console.log(fun.length);//1 console.log(func.length);//0
Ecmascript 规定可以定义任何参数,但是最多数量不能超过25个,属性length给查看预期参数提供一个方便的方式。
valueOf‘ 和toString 方法 任何函数也共享object 的valueof 和toString 方法,两个方法都是返回函数的源代码。
闭包