美文网首页
函数内部属性

函数内部属性

作者: Jabo | 来源:发表于2018-10-24 23:38 被阅读0次

    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()
    

    相关文章

      网友评论

          本文标题:函数内部属性

          本文链接:https://www.haomeiwen.com/subject/qfrftqtx.html