js 面向对象学习4 function 和闭包

时间:2021-07-05 17:25:22

    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 方法,两个方法都是返回函数的源代码。

 

闭包