js的閉包問題

2021-09-07 23:32:13 字數 1033 閱讀 5794

首先我們需要了解閉包,了解閉包就要了解全域性變數和區域性變數。

在之前的js相關部落格中,已經提到過全域性變數和區域性變數。全域性變數是在整個js的作用範圍,還要了解在定義全域性變數時,它前面的關鍵字是可以省略的。而區域性變數作用範圍只是在當前的作用域。

我們在呼叫區域性變數時要使用到return語句,由此引出我們的閉包問題。

閉包可簡單理解為使用別的區域性變數。其缺點是閉包的值會存在記憶體裡,大量使用閉包會導致記憶體洩露。

我們通常在做js的版本庫的封裝的時候會經常使用到閉包。

下面我們通過**來進一步了解閉包。

function f1()

return f2();

}f1();

//在這個方法裡,num的值相對於f2來說時乙個全域性變數,該值可以被f2呼叫

在這個方法中,num的值是區域性變數,但它和f2方法時同級關係,所以相對於f2來說,num對它是乙個全域性變數。

showname();

function showname()

showstu();

function showstu()

num的值屬於shouname方法,若無return語句,showstu方法不能顯示num的值,這裡return就是閉包,讓showstu方法呼叫showname方法的區域性變數。

function f1()

f1();

function f2()

f2()

這段**和上面一段**含義相同,使用閉包讓f2方法呼叫f1方法的區域性變數。

下面的**是一段關於閉包的題目:

var sum = function () 

} else

}console.log(sum(2, 3));//5

console.log(sum(2)(3));//5

兩個輸出的結果雖然相同,但是所走的語句是不同的。第乙個走的語句是長度不為1,兩個引數相加;第二個走的語句是長度為1,而後將另乙個值與前值相加。

JS閉包問題

因為你需要在事件內使用事件外的迴圈變數i。你的迴圈中只是為元素繫結事件,這時事件並沒有觸發執行。等到事件觸發時,那個迴圈早已經結束了,那時的i的值已經是迴圈最大值加1了。所以需要用一些方式儲存住當前迴圈的i的值。方案1為 用閉包儲存住當前迴圈的i的值。for var i 0 i i 方案2為 用le...

JS的永恆閉包問題

我理解的閉包就是 乙個函式裡邊包含另外乙個函式,並且裡邊的函式可以讀取這個函式外邊函式裡邊的任何資訊。內層的函式可以使用外層函式的所有變數,即使這個外層函式已經執行完畢了。閉包可以用在許多地方,它的最大用處有兩個 第乙個是前面提到的可以讀取函式內部的變數 區域性變數 第二個就是讓這些變數的值始終保持...

JS閉包中的this問題

首先看一段 var obj var c obj.get console.log c 那麼輸出c的值為多少呢?看下圖 這說明obj.get 只是返回乙個匿名函式,並沒有執行。所以轉到this,相應的 為 var name ss var obj var val obj.get console.log v...