Skip to content

Latest commit

 

History

History
101 lines (75 loc) · 2.71 KB

函数.md

File metadata and controls

101 lines (75 loc) · 2.71 KB

函数

函数实际上是对象,每个函数都是Function类型的实例,Function也有属性和方法,跟其他引用类型一样。因为函数是对象.所以函数名就是指向函数对象的实例。

箭头函数

Es6新增的胖箭头(=>) 任何可以使用函数的地方,都可以使用箭头函数

let arrFunction = (a,b) =>{
    return a + b;
}
console.log(arrFunction(1,2));//3

如果只有一个参数可以不带括号。没有参数或多个参数的时候需要括号

let double = (x) => {return 2*x;};
let title = x =>{return 2*x};

函数名

因为函数名就是指向函数的指针,所以它们跟其他包含对象指针的变量具有相同行为,一个函数可以有多个名称。

function sum(sum1,sum2){
    return sum1 + sum2;
}
console.log(sum(10,10));//20
let str = sum;
console.log(str(10,10));//20
sum = null;
console.log(str(10,10));//20

Es6的所有函数对象都会暴露一个只读的name属性。

参数

js函数的参数跟其他语言不通,它不会关心传入的参数个数,也不关心参数的数据类型。定义函数2个参数,调用不一定要接收两个参数。可以传一个、二个、三个,解析都不会报错。因为ECMAScript函数的参数在内部表现为一个数组,函数被调用时总会接收一个数组,但函数不关心这个数组里面有什么或者是包含什么。或者什么也没有那也没有问题的。

(非箭头函数)时,可以在函数内部访问arguments对象,从中取得传进来的每个参数的值。

arguments对象是一个类数组(但不是Array实例)比如:

function fn(){
    console.log(arguments.length);
}
fn("string",45);//2
fn();//0
fn(12);//1

还有一点就是arguments可以跟命名参数一起使用

   function fn(a,b){
            if(arguments.length === 1){
                console.log(a + 10);
            }else if(arguments.length === 2){
                console.log(arguments[0] + b);
            }
        }

没有重载

如果ECMAScript定义了两个同名函数,后定义的会覆盖前面的。

 function fn() {
            alert(1)
        }

        function fn() {
            alert(2) //2
        }
        fn();

可以通过检查参数的类型和数量,然后分别执行不同的逻辑来模拟重载。

  let numInt = function(num){
        return num  + 10;
       }
       numInt =  function(num){
        return num + 20;
       }
       let result = numInt(1)
       console.log(result);//21

在创建第二个函数时变量numInt被重写成保存的的第二对象。

默认参数值

ES6之后支持显示定义默认值参数了,在参数后面用=赋值即可