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

js基础知识总结:函数,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。