函数内部属性

arguments

  1. 类数组对象,包含传入函数中的所有参数
  2. arguments的主要用途是保存函数参数,但这个对象还有一个名叫 callee 的属性
  3. 该属性是一个指针,指向拥有这个argument对象的函数

经典阶乘Demo

        /**
         * @description 经典的阶乘函数
         * @param {Number}
         * 存在的问题
         * 执行函数与函数名factorial 紧紧耦合
         */
        function factorial(num) {
            if (num <= 1) {
                return 1;
            } else {
                return num * factorial(num - 1);
            }
        }

消除函数的强耦合

        /**
         * @description 使用arguments.callee
         * @param {Number}
         * 消除上面的紧密耦合现象
         */
        function factorial(num) {
            if (num <= 1) {
                return 1;
            } else {
                return num * arguments.callee(num - 1);
            }
        }

this

  1. 函数执行的环境对象
  2. 全局中this的引用对象是window
        /**
         * @description this对象用例
         */
        var color = "red";
        var o = { color: "blue" };

        function sayColor() {
            alert(this.color);
        }

        sayColor();  //red

        o.sayColor = sayColor;
        o.sayColor();   //blue

caller

        /**
         * caller
         * @return {EventString} 返回调用函数结构体
         */
        function outer() {
            inner();
        }

        function inner() {
            alert(inner.caller)
        }

        outer()

        /**
         * @description 松散耦合
         * arguments.callee.caller
         */
        function outer() {
            inner();
        }

        function inner() {
            alert(arguments.callee.caller)
        }

        outer()
最新动态关注公众号:小宝说事

你可能感兴趣的:(函数内部属性)