在函数内部,有两个特殊的对象:参数和这个。
参数是一个类数组对象。包含着传入函数中的所有参数。但这个对象还有一个名叫被的属性,该属性是一个指针,指向拥有这个参数对象的函数。
经典案例:阶乘函数
函数的阶乘(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函数内部属性之参数和这个实例解析