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