函数的内部属性和方法(arguments、callee)
amandakelake opened this issue · 0 comments
amandakelake commented
函数内部属性和方法(arguments、this)
#前端/Javascript/个人理解总结
每个函数都是Function类的对象,而且都与其他引用类型一样具有属性和方法
由于函数是对象,所以函数名实际上也只是一个指向函数对象的指针而已;
所以使用不带圆括号的函数名是访问函数指针,而非调用函数
函数内部有两个特殊的对象
arguments
和this
每个函数都包含两个属性
length
和prototype
每个函数都包含两个非继承而来的方法
call
和apply
arguments
Arguments是一个类数组对象,包含着所有传入函数中的形参,它还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数,也就是代指函数本身
先看一个递归函数(阶乘)
function factorial(num) {
if (num <= 1) {
return 1
} else {
return num * factorial(num-1)
}
}
但函数的执行与函数名factorial
紧紧的联系在了一起
比如说,由于factorial
被绑定,func1()
返回的就是0
var func1 = factorial;
func1()
那么,如何解耦,就要用到callee
了
function factorial(num) {
if (num <= 1) {
return 1
} else {
return num * arguments.callee(num-1)
}
}
这样就完成了函数体代码与函数名的耦合
this
length
表示函数希望接收的命名参数的个数
prototype
不可枚举,用for-in无法发现
call和apply
设置函数体内this对象的值