Function类型

  • callee:arguments对象的属性,该属性是一个指针,指向拥有这个arguments对象的函数.
            /*function factorial(num){
                if (num <= 1) {
                    return 1;
                } else {
                    return num * factorial(num-1)
                }
            }*///此方法等价于下面这个方法
    
            function factorial(num){
                if (num <= 1) {
                    return 1;
                } else {
                    return num * arguments.callee(num-1)
                }
            }
    
            var trueFactorial = factorial;
            
            factorial = function(){
                return 0;
            };
            
            alert(trueFactorial(5));   //120
            alert(factorial(5));       //0

     

  • 每个函数都有两个方法:apply()和call() 
  1. apply():接受两个参数:一个是在其中运行函数的作用域,另一个是参数数组.其中,第二个参数可以是Array实例,也可以是arguments对象.
            function sum(num1, num2){
                return num1 + num2;
            }
            
            function callSum1(num1, num2){
                return sum.apply(this, arguments);
            }
            
            function callSum2(num1, num2){
                return sum.apply(this, [num1, num2]);
            }
            
            alert(callSum1(10,10));   //20
            alert(callSum2(10,10));   //20

     

  2. call():第一个参数和apply一样,其余的参数是直接传.
            function sum(num1, num2){
                return num1 + num2;
            }
            
            function callSum(num1, num2){
                return sum.call(this, num1, num2);
            }
            
            alert(callSum(10,10));   //20
     
  • apply()和call()的真正用处:
        window.color = "red";
        var o = { color: "blue" };
        
        function sayColor(){
            alert(this.color);
        }
        
        sayColor();            //red
        
        sayColor.call(this);   //red
        sayColor.call(window); //red
        sayColor.call(o);      //blue
  • 函数还有一个方法:bind(),可以绑定函数的运行环境
            window.color = "red";
            var o = { color: "blue" };
                               
            function sayColor(){
                alert(this.color);
            }
            var objectSayColor = sayColor.bind(o);
            objectSayColor();   //blue

     

  • 函数还有一个length属性:表示函数希望接受的命名参数的个数
            function sayName(name){
                alert(name);
            }      
            
            function sum(num1, num2){
                return num1 + num2;
            }
            
            function sayHi(){
                alert("hi");
            }
            
            alert(sayName.length);  //1
            alert(sum.length);      //2
            alert(sayHi.length);    //0
     

转载于:https://my.oschina.net/langgege/blog/1058111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值