[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** (全局匹配)
~~~