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