这个系列,我会把阅读《Javascript高级程序设计》之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法。做这个一方面是提升了我的阅读效果以及方便我以后阅读

  另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核心内容。

  绿色背景的内容是我认为比较值得注意的原著内容。

  黄色背景的内容是我认为非常重要的原著内容。

  我的理解会用蓝色的字体标示出来。

  这章的内容较多,而且比较重要,分两篇来记录,这个是下篇。

 

  5.5.4 函数内部属性

  在函数内部,有两个特殊的对象: arguments 和 this。其中, arguments 在第 3 章曾经介绍过,它是一个类数组对象,包含着传入函数中的所有参数。虽然 arguments 的主要用途是保存函数参数,但这个对象还有一个名叫 callee 的属性该属性是一个指针,指向拥有这个 arguments 对象的函数。请看下面这个非常经典的阶乘函数

function factorial(num){

if (num <=1) {

return 1;

} else {

return num * factorial(num-1)

}

}

  定义阶乘函数一般都要用到递归算法;如上面的代码所示,在函数有名字,而且名字以后也不会变的情况下,这样定义没有问题。但问题是这个函数的执行与函数名 factorial 紧紧耦合在了一起。为了消除这种紧密耦合的现象,可以像下面这样使用 arguments.callee。

function factorial(num){

if (num <=1) {

return 1;

} else {

return num * arguments.callee(num-1)

}

}
View Code

相关文章: