• js基础知识总结:函数


    函数内部的属性:
    arguments 和this是函数内部的两个特殊对象
    arguments:
    function recursion(num){
        if(num<=1){
            return 1;
        }else{
            return num*recursion(num-1);
        }
    }
    另一种写法:
    function recursion(num){
        if(num<=1){
            return 1;
        }else{
            return num*arguments.callee(num-1);
        }
    }
    arguments:表示当前参数的数组
    arguments.callee 表示引用当前正在正在执行的函数,或者说是调用arguments.callee的函数
    的引用,arguments.callee给匿名函数提供了一种自我引用的方式
    var func=function(){
        alert(func===arguments.callee);
    }
    func();//调用该函数,我们得出的结果是true
    从该例子我们可以看出func和arguments.callee对象的类型和值都相等。
    
    callee属性的初始值就是正在执行的Function对象
    
    caller:
        返回一个对函数的引用,该函数调用了当前函数
        
    this 对象:
        this对象引用的是window(windwo是一个对象,而且是js当中最大的一个对象
        ,并且它是最外围的对象)
        alert(window);//[object window]
        alert(typeof window);//object    window 是对象 类型是对象 表示全局
        
        alert(this); // [object Window]  this 目前表示的是window,因为在window的范围下
        alert(typeof this);//object
        
        alert(this===window);//返回值为 true
        在“全局”变量下的this 就是window
        
        window.color='红色的';
        
        function sayColor(){
            //alert(this);// [object window]
            alert(this.color);//因为该函数 sayColor() 未赋值给一个对象 所以此处的this依然代表着window对象
        }
        sayColor();// 调用的是window下的color
    
        var box={
            color:'蓝色的'
        };
        box.sayColor=sayColor;将sayColor函数赋值给了 box对象的sayColor属性
        /*
            上边的代码其实就相当于
            var box={
                color:'蓝色的',
                sayColor:function(){
                    //alert(this);// [object Object]
                    alert(this.color);
                }
            };
        */
        box.sayColor();//此处执行的是box里边的this.color
        //结果是 蓝色的
        
    --------------------------------------------
    <script type="text/javascript">
    function box(num1,num2){
        return num1+num2;
    }
    //可以使用这种方式将sum函数转换成 box方法
    function sum(num1,num2){
        return box.apply(this,[num1,num2]);//此处的this指的是window对象(将this换成window也是一样的),数组表示的是传递的参数
    }
    alert(sum(19,21));//返回的结果是40
    
    ->函数apply:
        语法:apply[[thisObj],[argArray]]
        定义:应用某一个对象的一个方法,用一个对象替换当前对象
        thisObj代表某一个对象 上述例子中这个对象是当前对象 this
        argArray表示用来替换当前对象的的对象的参数 数组
    
    上述例子的另一个中写法
    function sum2(num1,num2){
     return box.apply(this,arguments);//arguments代表的是box函数中参数的数组
    }
    alert(sum2(10,10));
    
        
    ->使用apply和call可以冒充另一个方法
        apply与call实现的效果是一样的 
        call和apply不同的是 call中的参数是一个一个的,而apply则必须以数组的形式传递
    function sum(num1,num2){
        return box.call(this,num1,num2);//注意参数的传递方式和apply的不同之处
    }    
    alert(sum(10,10));
    
     冒充的作用:主要用于扩展函数赖以运行的作用域
     
     /*
        var color='红色';
        
        var box={
            color:'蓝色'
        };
        function sayColor(){
            alert(this.color);
        }
        //使用call 冒充 window对象
        sayColor.call(window);//红色  弹出的是window对象的 color 
        sayColor.call(this);// 红色   弹出的样式window对象的color
        
        //使用call 冒充 box对象
        sayColor.call(box);//蓝色 弹出的是 box对象下的color属性
        
     */
      此时 可以看出 并没有给box对象添加 sayColor属性对象却可以执行出 sayColor的效果
    View Code
  • 相关阅读:
    Linux安装oracle 10g常见问题之——ORA-01078,LRM-00109,ORA-01102
    Linux安装oracle 10g常见问题之——OUI-25031
    C#中static静态变量的用法
    让DIV中的内容水平和垂直居中
    json对象与json字符串互换
    AJAX请求 $.post方法的使用
    .NET(c#)new关键字的三种用法
    创建数据库和表的SQL语句
    SQL、LINQ、Lambda 三种用法(转)
    AJAX中UPDATEPANEL配合TIMER控件实现局部无刷新
  • 原文地址:https://www.cnblogs.com/Shang0109/p/3857523.html
Copyright © 2020-2023  润新知