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
相關文章
相關標籤/搜索