函数内部
ES5中,函数内部存在两个特殊的对象:arguments和this。ES6新增了new.target属性。
arguments
arguments对象其实还有一个callee属性,是一个指向arguments对象所在函数的指针。
function fb(num){ if(num<=1){ return 1; }else{ return num * fb(num-1); } } /*这个函数要正确执行就必须保证函数名是 factorial,从而导致 了紧密耦合。使用 arguments.callee 就可以让函数逻辑与函数名解耦*/ function factorial(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); } }
this
在标准函数中,this引用的是把函数当成方法调用的上下文对象,这时候通常称其为this值(在网页的全局上下文中调用函数时,this指向window)。
window.color = 'red'; let o = { color:'pink'; }; function sayColor(){ console.log(this.color); } sayColor();//red o.sayColor = sayColor; o.sayColor();//pink
在箭头函数中,this引用的是定义箭头函数的上下文。