JS的一些数据类型的方法和函数(四)

今天来记录关于Function类型的一些方法和功能。

Fuction 类型

我们知道,在ES中,函数实际上是对象。每一个函数都是Function类型的实例,而且与其他引用类型一样都具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定.

函数的基本声明方式如下

function sum(a,b){
    return a+b;
}
let sum2=function(a,b){
    return a+b;
};

这两种定义函数的方法基本上是相差无几的。

注意看第二个声明方法,它是通过变量sum便可以访问。

由于函数名仅仅是指向函数的指针,因此一个函数可以有多个不同的函数名。

function sum(a,b){
    return a+b;
}
console.log(sum(10,10)) // 20
let anySum=sum;
console.log(anySum(10,10)) // 20
sum=null;
console.log(anySum(10,10)) // 20

这里我们就算让sum=null也不会影响anySum的正常使用。

1.没有重载

ES里的函数没有重载的概念。

我们看一下代码

function sub(a,b){
    return a-b;
}
function sub(a,b){
    return a-b+100;
}
console.log(sub(20,10)); //110

显然,这个例子中声明了两个同名的函数,而结果则是后面的函数覆盖了前面的函数。上面的代码与下面的代码没有区别

var sub=function(a,b){
    return a-b;
}
sub=function(a,b){
    return a-b+100;
}
console.log(sub(20,10)) // 110

2.函数声明和函数表达式

虽然函数声明和函数表达式在看起来是没有什么区别的,然而,解析器在向执行环境中加载数据是,对他们两个的处理是不一样的。解析器会率先读取函数声明,并使其在执行任何代码之前可用;而函数表达式需要等到解析器执行到他所在的代码行时才会真正被解释执行。看下面的代码。

 

console.log(A(10,10)) // 100
function A(a,b){
    return a*b;
}

console.log(B(10,10)) //  Uncaught ReferenceError: B is not defined
let b =function(a,b){
    return a*b;
}

 

从这两个代码执行结果中就可以看到他们有什么不同了。

 

posted @ 2020-09-16 14:28  FuloliyaLansfroya  阅读(124)  评论(0)    收藏  举报