前端押题 JS

136 阅读2分钟

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 的一种语法特性。

闭包 = 函数 + 自由变量

对于一个函数来说,变量分为:全局变量、本地变量、自由变量

函数去访问外部变量,再将这段代码放在非全局环境中,就是闭包。可以通过立即执行函数创造出一个非全局环境。

解决了以下问题:

  1. 避免污染全局环境。(因为用的是局部变量)
  2. 提供对局部变量的间接访问。(因为只能 count += 1 不能 count -= 1)
  3. 维持变量,使其不被垃圾回收。

优点:简单,好用。

缺点:闭包使用不当可能造成内存泄露。

解决方法:少用或者不用