如何理解Javascript中的函数(Function)

Function类型

首先得知道,每个函数都是Function类型的实例,所以函数本身是对象。
示例1:

function sum (num1, num2){
    return sum1 + sum2;  
}

示例2:

var sum = function(num1, num2){
    return num1 + num2;
}

本质上这两种定义函数的方式没什么差别。因为函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
定义一个函数可以理解为:函数名是变量,函数是对象,函数名是指向函数的指针,与其他变量没什么不同。

没有重载(深入理解)

看个例子:

function add(num1){
    return num1+100
}

function add(num2){
    return num2+200
}
var result = add(100);    //300

这个例子中声明了两个同名函数,结果则是后面的函数覆盖了前面的函数。可以理解为定义了一个变量add 指向一个function, 然后又改变了这个变量add指向了另一个function,所以只有最后的function生效。

函数属性和方法

每个函数都包含两个属性:length和prototype。其中,length属性表示函数希望接收的命名参数的个数。

function sayName(){
    alert(name);
}
function sum(num1, num2){
    return num1 + num2;
}
function sayHi(){
    alert('hi');
}
console.log(sayName.length);    //1
console.log(sum.length);    //2
console.log(sayHi.length);    //0

每个函数都包含两个非继承而来的方法:call() 和 apply()
apply() 方法接收两个参数,一个时在其中运行函数的作用域,另一个是参数数组。
call() 方法接收的第一个参数也是在其中运行函数的作用于,其他的参数必须逐个列举出来。
ES5还定义了一个方法:bind()。这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。
详细了解这三个函数,请去查看js中函数的this指向相关内容。

函数内部属性

在函数内部,有两个特别的对象:arguments和this。 arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

有疑问或者问题,请留言,本人常在回复比较及时。
作者:Cirry
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/cirry/p/12637406.html