摘要:方法都保存在函數的名下因此每個函數都可以直接調用。都用于改變函數的執行環境。和和實際功能一致。輸出結果為輸出結果為在非嚴格模式下,等價于和必須把函數參數寫全,否則無法正確運行。對的,只是創建一個函數實例,因此一般需要以值的形式傳遞之。
方法call()、apply()、bind()都保存在函數的prototype名下(因此每個函數都可以直接調用)。都用于改變函數的執行環境。
call()和apply()call()和apply()實際功能一致。
call()和apply()在原函數擁有參數的時候,不能只有一個參數了。
function add(num1,num2){ console.log(num1+num2); } function show(num1,num2){ return add.call(null,num1,2); } show(2,3); //輸出結果為4 function add(num1,num2){ console.log(num1+num2); } function show(num1,num2){ return add.call(null,num1); } show(2,3); //輸出結果為NAN
在非嚴格模式下,call(null) 等價于 call(this) 和 call(undefined)
call()必須把函數參數寫全,否則無法正確運行。
apply()可以理解為,第二個參數如果需要,必須傳入全部參數組成的一個數組,或者arguments。
call()和apply()是直接調用,而bind()的作用:創建一個函數的實例,執行環境變為bind的參數。對的,只是創建一個函數實例,因此一般需要以值的形式傳遞之。
var cat = {color:"blue"}; window.color = "red"; function showColor(){ console.log(this.color); } showColor.bind(cat); //沒有任何輸出 showColor.bind(cat)(); //輸出blue var newShowColor = showColor.bind(cat); newShowColor(); //輸出blue
bind()可用于setTimeout()、setInterval()或者事件處理(document),被綁定的函數也會用掉更多的內存。
自定義的bind()function bind(fn,arg){ return function(){ return fn.apply(arg,arguments); } }
這里的arg是執行環境對象,arguments是fn函數本身的參數。
bind(showColor,cat);等價于showColor.bind(cat);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93068.html
摘要:輸出的作用與和一樣,都是可以改變函數運行時上下文,區別是和在調用函數之后會立即執行,而方法調用并改變函數運行時上下文后,返回一個新的函數,供我們需要時再調用。 前言 js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改變函數運行時上下文,最終的返回值是你調用的方法的返回值,若該方法沒有返回值,則返回undefined。這幾個方法...
摘要:應用場景求數組中的最大值和最小值并不是最佳選擇是中的靜態方法,因此必然是沒有使用上下文的必要的。因此綁定只需要用或者占位就可以了。 前言 面試,幾乎每次都會問到一個js中關于call、apply、bind的問題,比如… 怎么利用call、apply來求一個數組中最大或者最小值 如何利用call、apply來做繼承 apply、call、bind的區別和主要應用場景 作用 首先問個問...
摘要:奔著一星期徹底弄清楚一個小知識點的目的這次的目標是方法在實際項目中經常會用到這三個函數只是簡單的知道都是用來進行上下文綁定的這三個函數都可以實現現在看來這三者還是有很大區別的特別是和其他兩個的區別先說和目的是改變函數的執行上下文下面列舉一些 奔著一星期徹底弄清楚一個javascript小知識點的目的,這次的目標是call apply bind方法 在實際項目中,經常會用到這三個函數,只...
摘要:不能應用下的等方法。首先我們可以通過給目標函數指定作用域來簡單實現方法保存,即調用方法的目標函數考慮到函數柯里化的情況,我們可以構建一個更加健壯的這次的方法可以綁定對象,也支持在綁定的時候傳參。原因是,在中,多次是無效的。 bind 是返回對應函數,便于稍后調用;apply 、call 則是立即調用 。 apply、call 在 javascript 中,call 和 apply 都是...
摘要:參考鏈接在中,和是對象自帶的三個方法,都是為了改變函數體內部的指向。返回值是函數方法不會立即執行,而是返回一個改變了上下文后的函數。而原函數中的并沒有被改變,依舊指向全局對象。原因是,在中,多次是無效的。 參考鏈接:https://juejin.im/post/59bfe8... 在JavaScript中,call、apply和bind是Function對象自帶的三個方法,都是為了改變...
閱讀 1411·2021-10-08 10:04
閱讀 733·2021-09-07 09:58
閱讀 2912·2019-08-30 15:55
閱讀 2424·2019-08-29 17:21
閱讀 2126·2019-08-28 18:04
閱讀 3075·2019-08-28 17:57
閱讀 715·2019-08-26 11:46
閱讀 2228·2019-08-23 17:20