[TOC]
# 題1、什么是閉包?
答:
閉包就是能夠讀取其他函數內部變量的函數。簡單理解成"定義在一個函數內部的函數"。
1. 閉包函數是指有權訪問另一個函數作用域中的變量的函數
2. 創建閉包函數最常見的方式是在一個函數內創建另一個函數,通過另一個函數訪問這個函數的局部變量
3. 閉包的特點:
* 函數嵌套函數
* 函數內部可以引用外部的參數和變量
* 參數和變量不會被垃圾回收機制回收
4. 閉包的優點:
* 變量能長期駐扎在內存中
* 減少全局變量的污染
* 私有變量存在
* 創建命名空間
5. 閉包的實現:
* 函數嵌套函數
* 外層函數返回內層函數
* 外面有一全局變量接受外層函數
6. 閉包的缺點:閉包使用不當,會造成內存污染,正常無法垃圾回收機制清掉,IE低版本會造成內存泄露。
解決方法是,在退出函數之前,將不使用的局部變量全部刪除
7. 閉包的用途:
* 可以讀取函數內部的變量
* 讓這些變量的值始終保持在內存中
# 題2、eval 是干什么用的?
?
?
答:是 JavaScript 中的一個函數,用途:把一個字符串當作 JavaScript 代碼來執行。
~~~
let str = "var age = 100;"
?
// 把 str 字符串解析成 JavaScript 代碼來執行
eval(str) // 相當于執行了 var age = 100 這行代碼
?
console.log(age) // 100
~~~
# 題3、正則表達式中的 g 代表什么?
?
?
答: g 全局匹配,匹配所有滿足條件的字符。
~~~
let a = 'a3232fafda32';
a.replace(/\d/, '*') ? // a*232fafda32 (匹配第一個)
a.replace(/\d/g, '*') ? ? // a****fafda** (全局匹配)
~~~