call與apply 以及閉包

2022-05-25 06:57:08 字數 1057 閱讀 2160

初識這個東西感覺很難懂,特別是物件的繼承,還有物件導向也是比較難理解,說起來都簡單  只有自己用了用久了,多用多練吧

call()方法的第二個引數要依次列舉出來比如

funcion add (a,b){

return a+b;

function calladd(a,b){

return add.call(this,a,b);//這裡是依次列舉

console.log(calladd(1,3));

下面來講講個人對於閉包的見解

閉包這個就是典型的閉包

閉包個人理解是  函式在內部(區域性)定義 在全域性進行呼叫 就會產生閉包

這裡輸出的i值都為10

執行完test函式之後i值為10

而內部的函式demo被做成陣列的形式儲存起來

demo的作用域鏈並沒有因為test函式的執行完成而得到銷毀

被儲存在demo陣列物件裡的10個函式的作用域鏈裡

在全域性定義變數接收這個陣列遍歷呼叫這十個函式 所以輸出的值為10

這種型別的閉包是我們經常要遇到的

比如迴圈遍歷ul下面的li

每個li繫結點選事件當你需要繫結事件內部需要訪問你遍歷時定義的變數時

當然是訪問不到的 他永遠都是你的出口+1

解決辦法

把這個變數值用立即執行函式傳參的方式儲存起來

或者另一種思路  就以這裡為例

給這個 li[i]這個物件加上乙個屬性,把i值儲存起來

li[i].index=i;也可以解決閉包的問題  

還有一種閉包

以及對閉包的應用

利用閉包解決定時器傳參問題

對於閉包 自己理解的還不夠 加油!

apply 與call 的區別

function call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件...

Call 與Apply 的異同

在了解異同之前,先來搞清楚這兩個方法都是怎麼用的 call function.call obj arg1 arg2 argn 呼叫call的物件必須是個函式function call的第乙個引數將會是function改變上下文後指向的物件,也就是上面例子裡的小剛,也就是上上面例子裡的老婆大人,如果不...

apply 與call 的區別

function call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,用另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件...