zoukankan      html  css  js  c++  java
  • js 函数的内部属性

      函数内部有2个特殊对象: arguments 、 this

      1、arguments 是一个类数组对象,包含传入函数中的所有参数,虽然它的主要用途是保存函数参数,但这个对象还有一个名叫 callee 的属性。

      这个属性是一个指针,指向拥有这个 arguments 对象的函数:

      这是一个非常经典的阶乘函数。定义阶乘函数一般用到递归算法。

      但问题是这个函数的执行与函数名 factorial 紧紧耦合在了一起,如果过改变了函数名,势必要改变内部的递归调用。

      为了消除这种紧密耦合现象,可以使用 callee :

      2、另一个特殊对象是 this,引用的是函数据以执行的环境对象。

      函数 showColor() 是在全局中定义的,所以当在全局作用域中调用该函数时,this 引用的是全局对象 window,也就是对 this.color 求值会转换成对 window.color 求值,于是结果为 red 。

      而把这个函数赋值给对象 o ,并调用函数, this 引用的是对象 o,因此对 this.color 求值会转换成对 o.color 求值,返回 blue。

      3、ECMAScript 5 也规范了另一个函数对象的属性:caller。

      这个属性中保存这调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为 null。

      因为 outer() 调用了 inner(),所以 inner.caller 就指向了 outer()。

      但要注意,在严格模式下,访问这些属性会报错

      不过也可以使用命名函数表达式来取得相同的结果:

  • 相关阅读:
    重构学习资源
    cannot be cast to javax.servlet.Servlet 解决
    官网下载eclipse
    mapreduce.Job: Running job: job_1553100392548_0001
    IDEA取消形参名显示
    windows下和linux下运行jar
    idea打包可执行jar
    mkdir: Cannot create directory /file. Name node is in safe mode.
    IDEA2018激活码
    HADOOP集群搭建
  • 原文地址:https://www.cnblogs.com/guofan/p/14516437.html
Copyright © 2011-2022 走看看