作用域和閉包
阿新 • • 發佈:2022-05-05
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>閉包和作用域</title> </head> <body> <script> let aa= `LHS RHS 作用域 作用域鏈 詞法作用域 塊級作用域 閉包`; let a = `在變數中儲存值,並且在稍後取出或修改這些值 LHS 變數賦值 RHS 變數查詢 LHS 和 RHS 獲取變數的位置就是作用域 作用域是定義變數的區域,它決定了當前程式碼對變數的訪問許可權 全域性作用域和函式作用域 可執行程式碼內部訪問變數時,先在本地作用域中找,找到目標變數即返回,否則會去父級作用域中找 一直找到全域性作用域,這種巢狀機制,稱為作用域鏈 詞法作用域,也叫靜態作用域,函式被定義時,作用域已經被確定; 建立作用域:定義函式;使用 letconst; 有權訪問另一函式中變數的函式稱為閉包 應用場景:單例模式;它保證了一個類只有一個例項,實現方法是先判斷例項是否存在,如果存在就直接返回 否則就建立了再返回,好處是 避免了重複例項化帶來的記憶體開銷;柯里化,引數的複用,高階用法; 模仿私有屬性; 由於閉包使用過渡而導致的記憶體佔用無法釋放的情況,稱之為記憶體洩露; 當一塊記憶體不再被應用程式使用的時候,由於某種原因,這塊記憶體沒有返回給操作是系統或記憶體池的現象; 記憶體洩露可能導致程式卡頓甚至崩潰; 記憶體洩露原因:全域性變數的無意建立;移動DOM元素前忘記登出掉其中繫結的事件; 排查手段:memory 解決辦法:使用嚴格模式;關注dom生命週期,在銷燬階段記得解綁相關事件;使用事件委託統一處理; 避免過渡使用閉包; `;</script> </body> </html>