Function:
1:函数名实际上是一个指向函数对象的指针,不会与某个函数绑定。
2:只写函数名并不会调用函数,只有函数名()才是对函数的调用。
3:函数没有重载 感觉是因为(1)函数名只是一个指针,当对一个函数名进行第二次赋值时,已经对之前的值进行了覆盖(2)对于覆盖的条件也完全不符合,没有返回值,参数个数本来就可以不确定
4:函数的内部属性 在函数内部有两个特殊对象 arguments和this。arguments的主要用途是保存函数参数,arguments对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。this引用的是函数据以执行的环境对象。
例子:function factorial(num){
if(num <= 1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
5:每个函数都包含两个属性:length和prototype。其中length属性表示函数希望接收的命名参数的个数。
6:每个函数都有两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。首先apply()方法接收两个参数:一个是在运行函数的作用域,另一个是参数数组。其中,第二个参数可以是Array的实例,也可以是arguments对象。对于call()方法而言,第一个参数是this值没有变化,变化的是其余参数都直接传给函数。
例子:
function sum(num1, num2){
return num1+num2;
}
function callSum1(num1, num2){
return sum.apply(this, arguments);
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]);
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}