5.Function类型
定义
使用函数声明定义
function sum(num1,num2){ return num1+num2; }
使用函数表达式定义
var sum = function (num1,num2){ return num1+num2; }
使用Function构造函数定义
var sum = Function("num1","num2","num1+num2")
使用函数名就是使用函数的指针!
函数名本身就是变量,可以作为值来使用!
函数的内部属性:
函数属性和方法:arguments是类数组对象,包含传入的所有参数。但是还有一个callee属性,指向有arguments对象的函数
this函数操作的对象,也是函数执行所处的作用域。function factorial (num){ if (num<1) return 1; else return num*arguments.callee(num-1) }
length表示函数希望接受命名参数的个数。
function a(num){} function b(num1 ,num2){} function c(n1,n2,n3){} alert(a.length); //1 alert(b.length); //2 alert(c.length); //3
prototype 对于引用类型而言,prototype是保存他们所有实例方法真正所在。。。。
每个函数都包含两个非继承而来的方法,apply() 和 call()
apply()接受两个参数,第一个是其中运行函数的作用域this,第二个是参数数组argument 或者[ ]
call()和apply()差不多,第一个参数是作用域,第二个参数必须一个一个的传function sum(num1,num2){ return num1+num2; } function callsum1(num1,num2){ return sum.apply(this,argument); } function callsum2(num1,num2){ return sum.apply(this.[num1,num2]); }
最大的好处是:对象和函数不需要有任何耦合!!!function sum (num1,num2){ return num1+num2; } function callsum(num1,num2){ return sum.call(this,num1,num2); }
window.color = "red"; var o = {color : "blue"}; function sayColor(){ alert(this .color); } sayColor(); //red sayColor(this); //red sayColor(window); //red sayColor(o); //blue
toLocalString() & toString() & valueof() 都是返回函数的代码,代码根据浏览器存在差异。