返回

前端面试知识点梳理——js基础面试题

前端

JavaScript 基础面试常见问题指南

Var、Let 和 Const 的异同

在 JavaScript 中,理解 varletconst 三种变量声明方式之间的区别至关重要。var 是 ES5 语法,而 letconst 则是 ES6 语法。

  • 作用域: var 具有函数级作用域,这意味着在函数内部声明的 var 变量可在整个函数内访问。letconst 具有块级作用域,这意味着它们只在声明它们的代码块内可用。
  • 变量提升: var 变量会被提升到函数或全局作用域的顶部,这意味着可以在声明之前使用它们。letconst 没有变量提升。
  • 可修改性: varlet 声明的变量都可以修改,而 const 声明的常量不可修改。

ES5 和 ES6 语法

ES5 是 JavaScript 的第五个版本,于 2009 年发布。ES6,也称为 ES2015,于 2015 年发布,对 JavaScript 进行了多项改进,包括:

  • 引入了 letconst 变量声明。
  • 添加了块级作用域。
  • 引入了箭头函数、模板字符串等新特性。

块级作用域

块级作用域是指变量的作用域只限于它所在的代码块内。这意味着不同代码块中可以声明具有相同名称的变量,而不会相互冲突。在 ES5 中,只有 letconst 声明的变量具有块级作用域。在 ES6 中,所有变量都具有块级作用域。

变量提升

变量提升是指变量在代码执行前被提升到代码的顶部。这意味着可以在声明之前使用变量。在 ES5 中,只有 var 声明的变量会被提升。在 ES6 中,所有变量都会被提升。

作用域提升

作用域提升是指函数的作用域在代码执行前被提升到代码的顶部。这意味着可以在声明之前调用函数。在 ES5 中,只有 function 声明的函数会被提升。在 ES6 中,所有函数都会被提升。

变量声明提升

变量声明提升是指变量的声明在代码执行前被提升到代码的顶部。这意味着可以在声明之前访问变量的值。在 ES5 中,只有 var 声明的变量会被提升。在 ES6 中,所有变量都会被提升。

Let 和 Const 没有变量提升

var 不同,letconst 声明的变量没有变量提升。这意味着必须在声明它们之后才能访问它们。

严格模式

严格模式是一种 JavaScript 运行模式,它可以使代码更安全、更可靠。它可以通过在脚本的第一行添加 "use strict"; 来启用。严格模式会禁止一些不推荐的 JavaScript 行为,例如变量声明提升和隐式全局变量。

Global

global 是 JavaScript 中的全局对象。它包含所有全局变量和函数。可以在任何地方访问 global 对象。

代码示例

以下代码示例演示了 varletconst 之间的差异:

// 使用 var 声明变量
var myVar = 10;

// 在声明之前访问变量
console.log(myVar); // 输出:10

// 使用 let 声明变量
let myLet = 20;

// 在声明之前访问变量(将引发错误)
console.log(myLet); // 输出:ReferenceError: myLet is not defined

// 使用 const 声明常量
const myConst = 30;

// 尝试修改常量(将引发错误)
myConst = 40; // 输出:TypeError: Assignment to constant variable.

常见问题解答

  1. 为什么 ES6 中引入了 letconst
    为了提高代码的可预测性、安全性,并消除与 var 相关的提升问题。
  2. 块级作用域有哪些好处?
    它可以防止变量冲突、减少命名空间污染并提高代码可读性。
  3. 变量提升有什么缺点?
    它会导致难以调试的错误,因为变量可能在预期之前被使用。
  4. 如何启用严格模式?
    通过在脚本的第一行添加 "use strict";
  5. global 对象有什么用途?
    它提供了对所有全局变量和函数的访问,使它们可以在任何地方使用。

结论

了解 JavaScript 基础知识对于前端面试非常重要。掌握 varletconst 的区别、ES5 和 ES6 语法、块级作用域、变量提升等概念至关重要。通过理解这些关键概念,求职者可以为前端面试做好充分准备,并展现他们对 JavaScript 的扎实基础。