标签:
五 Function类型
每个函数都时Function类型的实例。函数也是对象。
声明函数:
function func_name () {} //javascript解析器会在程序执行时率先读取函数声明,使其在执行任何代码之前可用(可访问) var func_name = function(){}; //解析器执行到它所在的代码行,才会被解释执行。
因此函数名是个变量,保存的是指向函数对象的指针,不会与某个函数绑定,与包含对象指针的其他变量没什么区别。
1.没有重载
声明两个同名的函数,第二个会覆盖掉第一个
2.作为值的函数
函数名本身就是变量。因此函数体可以当作值来使用。可以当参数进行传递,也可以当其他函数的返回值。
function callSomeFunction (someFunction, someArgument){ return someFunction(someArgument); }
3.函数内部属性
函数内部有两个特殊的对象:arguments 和 this
*arguments对象保存的是所有传入函数内部的参数。
*arguments.callee。这是一个指针,指向拥有该arguments对象的函数
function factorial(num) { if(num <=1){ return 1; }else{ return num*arguments.callee(num-1);//递归调用 //相当于: //return num*factorial(num - 1); //这样消除了函数名与内部递归调用函数名的紧密耦合性 } }
*this 引用的是函数据以执行的环境的变量对象。
*caller 对象属性。此属性保存的是调用当前对象的函数的引用。如果在全局作用域中调用当前函数,值为null
function outer() { inner(); } function inner() { alert(arguments.callee.caller); } outer();//返回outer()函数的源代码
4.函数属性和方法
length --- FunctionObject.length 函数参数的个数。函数没有参数,则返回0
apply() --- Function.apply(scope[ ,Function.arguments||Array])//传递的参数可以为Arguments对象,也可以为参数数组
call() --- Function.call(scope[, argument1,argument2,.......])//所要传递的参数必须一一列举吹来
这两个函数都是扩展它自身运行时所在的作用域。参数1,这两个函数运行时所在的作用域(一般都为对象);参数2, 传递给这个函数的参数。
window.color = ‘red‘; var o = {‘color‘:‘blue‘}; function sayColor(){ alert(color); } sayColor(); // red sayColor.call(this) //red sayColor.call(window) //red sayColor.call(o) //blue
使用这两个函数的好处是:降低对象与方法之间的耦合性。
javascript学习笔记 - 引用类型 Function
标签:
原文地址:http://www.cnblogs.com/mysic/p/5384169.html