函数也是对象,函数名实际上是指向函数对象的指针
5.5.4 函数内部属性
arguments是用于保存函数参数的对象,其拥有一个属性callee,为一个指针,指向arguments所属的函数
function factorial (num) {
if(num <= 1) {
return 1;
}else {
return num * arguments.callee(num - 1);
//指向factorial
}
}
函数有一个caller属性,指向引用当前函数的函数
function outer () {
inner();
}
function inner () {
console.log(inner.caller); //指向outer
}
outer();
5.5.5 函数属性和方法
函数有一属性length,表示函数希望接收的命名参数的个数
function sayName (name) {
console.log(name);
}
function add (num1,num2) {
return num1 + num2;
}
function sayHi () {
console.log('hi');
}
console.log(sayName.length); //1
console.log(add.length); //2
console.log(sayHi.length); //0
函数有两个方法 apply 和 call
apply接收两个参数,作用域和参数数组
apply接收两组参数,作用域和其余参数
function add (num1,num2) {
return num1 + num2;
}
console.log(add.apply(this,[1,2])); //3
console.log(add.call(this,1,2)); //3
上述方法也可用于扩充作用域
bind方法,用于绑定this值,之后需要自己执行()
let color = 'red';
let o = {
color : 'blue'
};
function sayColor () {
console.log(this.color);
}
let osayColor = sayColor.bind(o);
osayColor();
osayColor()