在ECMAScript语言中,函数名字只不过是一个指针(可以认为是引用),下面的代码:

 

"use strict";

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

console.log(sum(1,2));

var sum2 = sum;
sum = null;

console.log(sum2(3,3));

输出:3,6;

 

 

代码可以看出,我们定义了函数,其实函数名是一个指针,指针指向了堆内存那块这个函数的定义,我们可以把这个地址保存好几份。

 

我们看一下“重载”(加引号强调不是真的):

 

"use strict";

function addSomeNumber(num){
    return num + 100;
}

function addSomeNumber(num,add){
    return num + add;
}

console.log(addSomeNumber(10));

 

结果是什么:NaN

 

上面的代码可以等价于下面的书写:

 

 

"use strict";

var addSomeNumber = function(num){
    return num + 100;
};

addSomeNumber=function(num,add){
    return num + add;
};

console.log(addSomeNumber(10));

由这个等价的代码,我们可以轻易的看出,当我们定义同名函数时候,相当于函数指针指向了其它代码定义。