函数内部属性
函数内部有两个特殊的属性arguments和this。其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针,指向拥有arguments的函数。而this据以引用的是函数执行环境对象。
function fib(n){ if(n = 1){ return 1; }else{ return n * arguments.callee(n - 1); } } //这里利用函数内arguments的callees属性降低了函数的耦合、
ECMAScript 5 也规范了另一个函数属性:caller。保存着调用当前的函数的函数的引用,如果是在全局作用域则为null。
function outer(){ inner(); } function inner(){ alert(inner.caller); } outer(); //alert函数会制动执行toString函数,这里弹出outer函数代码
每个函数都有两个非继承而来的方法:apply() 和 call():用途是在特定的作用域中调用函数,等于设置函数体内的this对象的值。
apply()方法接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组。第二个参数可以是Array()的实例,也可以是arguments对象。 function sum(num1, num2){ return num1 + num2; } function callSum(num1, num2){ return sum.apply(this, arguments) } callSum(1, 2); //全局作用域中调用所以this为window。 call()方法接受两个参数,与apply区别是第二个参数,必须逐个举列出来。 function callSum(num1, num2){ return sum.call(this, num1, num2); } callSum(10, 10); ECMAScript定义了bind方法,简历函数实例,其this值会被绑定到传给bind()函数的值,例如: var obj = { this.color: "red"}; window.color = "green"; function sayColor(){ alert(this.color);}; var newFunc = sayColor.bind(obj);newFunc(); //red
时间: 2024-10-14 20:58:34