JS函数内部属性之参数和这个实例解析

  

在函数内部,有两个特殊的对象:参数和这个。

  

  

参数是一个类数组对象。包含着传入函数中的所有参数。但这个对象还有一个名叫被的属性,该属性是一个指针,指向拥有这个参数对象的函数。

  

经典案例:阶乘函数

        函数的阶乘(num) {   如果(num & lt;=1) {   返回1;   其他}{   返回num * factorial (num-1);   }   }      

定义阶乘函数一般都要用到递归算法,如上所示,但你会发现,这个函数的执行与函数名阶乘紧紧耦合在了一起,为解决这个问题,我们可以使用arguments.callee。

        函数的阶乘(num) {   如果(num & lt;=1) {   返回1;   其他}{   返回num * arguments.callee (num-1);   }   }      

我们重写之后,阶乘()函数里没有引用函数名阶乘。这样无论引用函数时使用的是什么名字,都可以保证正常完成递归调用例。如:

        var trueFac=!;      阶乘=function () {   返回0;   }      console.log (trueFac (5));//120   console.log(阶乘(5));//0      

  

函数内部的另一个对象是这个,这引用的是函数执行的环境对象(当在网页的全局作用域中调用函数时,这对象引用的就是窗口)。
  

        窗口。颜色=昂焐?   var o={颜色:“蓝色”};      函数sayColor () {   警报(this.color);   }      sayColor ();//昂焐?      o。sayColor=sayColor;   o.sayColor ();//袄渡?/pre>      

在上面这个函数sayColor()是在全局作用域中定义的,它引用了这对象。由于在调用函数之前,它的值并不确定,因此本可能会在代码执行过程中引用不同的对象。

  

当在全局作用域中调用sayColor()时,这个引用的时全局对象窗口;换句话说,对this.color求值会转换成对window.color求值,于是结果就返回了“红”,而当把这个函数赋给对象o并调用o.sayColor()时,这个引用的是对象啊,因此对this.color求值会转换成对o.color求值,所以返回“蓝色”

。   

函数的名字仅仅是一个包含指针的变量。
  

  

  

以上所述是小编给大家介绍的JS函数内部属性之参数和这个实例解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留的言,小编会及时回复大家的!

JS函数内部属性之参数和这个实例解析