•arguments.callee()主要用在递归函数中调用函数自身的情境中。js和别的语言不同在于函数名只是一个指针,可以随时变化,函数中利用函数名来调用自身属于高耦合,可能会出现问题,而arguments.callee()调用自身就会规避掉这个问题 复制代码 代码如下: function factorial(num) { if (num <= 1) { return 1; } else { return num * factorial(num - 1); }; } function callee_f(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); }; } factorial(10); //运行正常 f = factorial; factorial = null; f(10); //error callee_f(10); //运行正常 f = callee_f; callee_f = null; f(10); //运行正常
•this主要用来帮助函数引用函数所处作用域中的对象。 复制代码 代码如下: var color = "red"; function syaColor() { console.log(this.color); } syaColor(); //red var o = new Object(); o.color = "blue"; o.sayColor = sayColor; o.sayColor(); //blue
call()和apply() call()和apply()是每个函数都包含的自有方法。之前已经提到了函数是定义的对象,那么调用函数时候,函数中的this是对当前与下变量的调用。而如果想改变函数执行所在域空间,则可以使用call()和apply()来实现。 复制代码 代码如下: color = "red"; var o = {color: "blue"}; function sayColor() { console.log(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(o); //blue