首頁 > web前端 > js教程 > javascript中call與apply以及bind有哪些不同

javascript中call與apply以及bind有哪些不同

php中世界最好的语言
發布: 2018-03-14 13:27:06
原創
1490 人瀏覽過

這次帶給大家javascript中call與apply以及bind有哪些不同,javascript中call與apply以及bind使用的注意事項有哪些,以下就是實戰案例,一起來看一下。

首先補充嚴格模式這個概念,這是ES5中提出的,只要寫上:

“use strict”
登入後複製

就是告訴目前瀏覽器,接下來的JavaScript程式碼將按照嚴格模式進行編寫。

function fn() { 
console.log(this); 
}
登入後複製

fn.call(); // 普通模式下this是window,在嚴格模式下this是undefined 
fn.call(null); //普通模式下this是window,在嚴格模式下this是null 
fn.call(undefined); // 普通模式下this是window,在嚴格模式下this是undefined 
#apply方法和call方法的作用是一模一樣的,都是用來改變方法的this關鍵字,並且把方法執行,而且在嚴格模式下和非嚴格模式下,對於第一個參數是null/undefined這種情況規律也是一樣的,只是傳遞函數的的參數的時候有差別。

function fn(num1, num2) {
    console.log(num1 + num2);
    console.log(this);
}fn.call(obj , 100 , 200);fn.apply(obj , [100, 200]);123456
登入後複製

call在傳遞參數給fn的時候,是一個個的傳遞值的,而apply不是一個個傳的,而是把要給fn傳遞的參數值同一個的放在一個數組中進行操作,也相當於一個個的給fn的形參賦值。

bind方法和apply、call稍有不同,bind方法是事先把fn的this改變為我們要想要的結果,並且把對應的參數值準備好,以後要用到了,直接的執行即可,也就是說bind同樣可以改變this的指向,但和apply、call不同就是不會馬上的執行。

var tempFn = fn.bind(obj, 1, 2); 
tempFn();
登入後複製

第一行程式碼只是改變了fn中的this為obj,並且給fn傳遞了兩個參數值1、2,但是此時並沒有把fn這個函數給執行,執行bind會有一個回傳值,這個回傳值tempFn就是把fn的this改變後的那個結果。

注意:bind這個方法在IE6~8下不相容。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

spring boot的定時任務應該如何使用

javascript中call詳解

#

以上是javascript中call與apply以及bind有哪些不同的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板