📜  JavaScript 面试问答 |设置 3(1)

📅  最后修改于: 2023-12-03 15:31:46.569000             🧑  作者: Mango

JavaScript 面试问答 |设置 3

欢迎来到 JavaScript 面试问答第三篇,本次我们将涵盖一些常见的 JavaScript 面试问题和答案,帮助你为面试做好准备。

问题
1. JavaScript 中有哪些数据类型?

JavaScript 有 7 中数据类型,包括 6 种原始数据类型和一个引用数据类型。原始数据类型包括:

  • 数字(Number)
  • 字符串(String)
  • 布尔值(Boolean)
  • null
  • undefined
  • Symbol

引用数据类型包括:

  • 对象(Object)
2. 谈一下 JavaScript 中的函数声明(Function Declaration)和函数表达式(Function Expression)的区别。

函数声明可以在任何位置声明,并且在代码执行之前会被提升到作用域的顶部。函数表达式则必须在代码执行到它之前声明。函数表达式可以赋值给变量、作为参数传递给其他函数或者在回调中使用。

// 函数声明
function sum(a, b) {
  return a + b;
}

// 函数表达式
const sum = function(a, b) {
  return a + b;
}
3. JavaScript 中的变量提升是什么意思?

变量提升指的是在代码执行之前,变量和函数声明都会被提升到作用域的顶部。变量提升只适用于声明,并不适用于赋值。

console.log(name); // undefined
var name = 'Alice';

在上面的代码中,即使变量 nameconsole.log 之前声明,控制台仍然会输出 undefined,因为虽然变量声明已经被提升到作用域的顶部,但变量的赋值操作并没有提升。

4. 什么是闭包(Closure)?

闭包是指一个函数能够访问并使用其他函数作用域内的变量,即使这些变量已经不在该函数的作用域内。闭包常常用于隐藏变量和函数,以及在异步编程中保存状态。

function counter() {
  let count = 0;

  function increment() {
    count++;
    console.log(count);
  }

  return increment;
}

const incrementCounter = counter();
incrementCounter(); // 1
incrementCounter(); // 2

在上面的代码中,counter 函数返回一个内部函数 increment,该函数能够访问并修改 counter 函数内的变量 count。并且,由于 increment 函数被分配给 incrementCounter 变量,因此该函数不会被垃圾回收器清除,使得 count 变量能够保持状态。

结语

以上是本系列 JavaScript 面试问答的第三篇,希望这些问题和答案能够帮助你为面试做好准备。