JS函數四種調用模式

1.函數模式
           this指向window全局對象
2.方法模式
            this指向調用這個方法的對象
3.構造函數模式
          this 使用new創建出來的對象
4.上下文模式
           this指向window全局對象

   在上下文調用模式中,可以修改this的值,也就是可以修改函數的調用方式

  使用如下兩個方法,可以修改函數調用上下文,也就是this的值
           apply
           api文檔中的語法語句中 [] 代表括起來的東西可有可無
           函數.apply(對象, 函數需要參數列表,是一個數組)
           call
           函數.call(對象,arg1,arg2,arg3...argn)


call和apply的區別
        1.第一個參數都是要把this修改成的對象
        2.當函數需要參數的時候,那麼apply是用數組進行參數的傳遞
        3.而call是使用單個的參數進行傳遞

        call用於確定了函數的形參有多少個的時候使用
        apply用於函數的形參個數不確定的情況


//案例:求一個數組中的最大值
        var arr = [9, 1, 4, 10, 7, 22, 8];

        //apply方法的第二個參數 是一個數組
        // 在調用的時候,會將數組中的每一個元素拿出來,作爲形參,挨個傳遞給函數

        //apply方法和call方法第一個參數傳遞null的時候,都表示爲函數調用模式
        //也就是將this指向window
        var max = Math.max.apply(null, arr);
        console.log(max);

 //案例:將傳入的參數打印,參數之間用-相互連接


        function foo() {


            //僞數組不具有join方法,所以這個時候就要考慮去借用一下數組的join方法
            var str = [].join.apply(arguments,["-"]);
            return str;
        }
        var str = foo(1, 3, "abc", "ffff", 99) // 1-3-abc-ffff-99
        console.log(str);


fun.call(null)===fun.call(window);

在全局對象訪問一個未定義變量會報錯

用對象訪問一個未定義的變量返回undifined

arr.push(arr1):會把整個數組arr傳進去

arr.push.apply(arr,arr1):會把arr1拆開再傳進去

使用call和apply會將傳入的第一個參數爲值類型的對象轉換成引用類型,檔位null或者undefined


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章