JavaScript
JS 的数据类型有哪些?
string(字符串)、number(数字)、boolean(布尔)、undefined(未定义)、null(空)、bigint(大整数)、symbol(符号)、object(对象)
JS 的 new 做了什么?
- 创建临时对象/新对象
- 绑定原型
- 指定 this = 临时对象
- 执行构造函数
- 返回临时对象
JS 的立即执行函数是什么?
声明一个匿名函数,然后立即执行它。这种做法就是立即执行函数。
(function(){alert('我是匿名函数')} ()) // 用括号把整个表达式包起来
(function(){alert('我是匿名函数')}) () // 用括号把函数包起来
!function(){alert('我是匿名函数')}() // 求反,我们不在意值是多少,只想通过语法检查。
+function(){alert('我是匿名函数')}()
-function(){alert('我是匿名函数')}()
~function(){alert('我是匿名函数')}()
void function(){alert('我是匿名函数')}()
new function(){alert('我是匿名函数')}()
var x = function(){return '我是匿名函数'}()
在 ES6 之前,只能通过它来「创建局部作用域」。
优点:兼容性好。缺点:丑。
// 使用 ES6 的 block + let 语法 解决缺点
{
let a = '我是局部变量啦'
console.log(a) // 能读取 a
}
console.log(a) // 找不到 a
JS 的闭包是什么?怎么用?
闭包是 JS 的一种语法特性。
闭包 = 函数 + 自由变量
对于一个函数来说,变量分为:全局变量、本地变量、自由变量
函数去访问外部变量,再将这段代码放在非全局环境中,就是闭包。可以通过立即执行函数创造出一个非全局环境。
解决了以下问题:
- 避免污染全局环境。(因为用的是局部变量)
- 提供对局部变量的间接访问。(因为只能 count += 1 不能 count -= 1)
- 维持变量,使其不被垃圾回收。
优点:简单,好用。
缺点:闭包使用不当可能造成内存泄露。
解决方法:少用或者不用