js閉包的理解 目前網上分析的最透徹文章

2022-02-23 23:13:13 字數 1155 閱讀 7254

js的閉包對於大家實際上並不陌生,但是真正敢說自己完全理解的人並不多。筆者在網上看到分析閉包的文章非常多,篇幅用的非常多,但是實際上分析的並不到位,或者根本就是不正確的。我有時候都在想,寫這些文章的人自己未必真的理解了。今天我就為大家說到說到js的閉包,看完你百分百的能夠理解。

說閉包之前,我們先要說乙個js的概念

js的變數不是傳統意義的變數,是乙個廣義的概念

例如:1、var i=0;

2、var str="china";

3、var fun=function()

第1個和第2個大家非常好理解,第3個簡單的解釋一下,它代表的是乙個函式表示式,看到了嗎?變數可以是乙個函式,它實際上就是乙個函式,要使用它直接就是fun();

進入正題:

網上使用最多的乙個例子如:

function

box()

}

return

arr;

}

網上的分析各種詭異看不懂,我直接給出我的結論,呼叫box()後,我們得到了乙個陣列,陣列中是乙個乙個的函式表示式:

function(),

function(),

function(),

function(),

function()

大家不要懵逼,這裡很容易理解,我們看這裡,在給陣列arr賦值的時候,本來就是賦值的乙個函式表示式

arr[i] = function()

大家明白了吧,你自己完全也可以使用alert(box());列印結果進行驗證,大家可能還有一點兒疑惑,我要的是值,不是表示式啊,很簡單,獲取函式表示式的值只需要在變數後面加乙個(),所以

alert(box()[0]());結果是5,因為變數i現在的值是5,所以陣列中的值都是5.就這麼簡單!

閉包可以幹什麼?閉包可以讓外部訪問內部的區域性變數

還是以乙個例子來解釋:

function

test()

這就是乙個最簡單的閉包,區域性變數通過函式返回。其它的應用都是類似,萬變不離其宗!

理解js的閉包

閉包 將內部函式儲存到外部時,將會生成閉包。閉包會導致原有的作用域鏈不釋放,造成記憶體洩漏。先來看乙個閉包的例子 functiona returnb vartemp a temp temp 此時輸出結果是2 和3,函式b和a形成了閉包,函式b被儲存到外部。functiontest functionb...

js 閉包的理解

閉包就是說,能夠讀取其他函式內部變數的函式。其實這句話我不是很明白,因為我覺得閉包的作用是 延遲函式執行 模擬私有變數 根據第二點的描述,應該是阻止其他東西訪問自身私有成員,到了這怎麼變成讀取其他函式內部變數了?反其道而行之?不管定義了,看看最經典的這個例子 延遲執行 function count ...

JS閉包的理解

一 什麼是閉包 閉包解釋 乙個擁有許多變數和繫結了這些變數的環境的表示式 閉包特點 函式巢狀函式 內部函式可以訪問外部函式的變數 引數和變數不會被 變數的作用域 要理解閉包,首先必須理解js特殊的變數作用域。變數的作用域無非就是兩種 全域性變數和區域性變數。閉包的幾大特性 本章講述的這些特性,並非是...