前端经典【面试题】持续更新

  • JavaScript 的基本数据类型有哪些?

    • 说明JavaScript 中有七种基本数据类型:undefinednullbooleannumberstringsymbol(ES6 引入)和 bigint(ES11 引入)。
    • 示例
      let num = 10;         // number
      let str = "Hello";    // string
      let isTrue = true;    // boolean
      let nothing = null;    // null
      let notDefined;        // undefined
      let sym = Symbol();    // symbol
      let bigInt = BigInt(123); // bigint
      
  • 什么是闭包?

    • 说明闭包是指一个函数能够访问其外部作用域的变量,即使外部函数已经返回。闭包可以用来创建私有变量。
    • 示例
      function outer() {
          let count = 0;
          return function inner() {
              count++;
              console.log(count);
          };
      }
      const increment = outer();
      increment(); // 1
      increment(); // 2
      
  • 解释原型链的概念。

    • 说明JavaScript 中的对象通过原型链继承属性和方法。每个对象都有一个 __proto__ 属性,指向其构造函数的原型。
    • 示例
      function Person(name) {
          this.name = name;
      }
      Person.prototype.greet = function() {
          console.log(`Hello, my name is ${this.name}`);
      };
      
      const john = new Person('John');
      john.greet(); // Hello, my name is John
      
  • JavaScript 中的 this 是什么?

    • 说明this 是一个动态绑定的关键字,指向函数执行时的上下文。它的值取决于调用函数的方式。
    • 示例
      const obj = {
          name: 'Alice',
          greet() {
              console.log(`Hello, ${this.name}`);
          }
      };
      obj.greet(); // Hello, Alice
      
      const greetFunc = obj.greet;
      greetFunc(); // Hello, undefined (在非严格模式下)
      
  • 解释 ===== 的区别。

    • 说明== 是宽松比较,会进行类型转换;=== 是严格比较,不会进行类型转换。
    • 示例
      console.log(0 == '0');  // true
      console.log(0 === '0'); // false
      
  • 什么是 Promise?如何使用?

    • 说明Promise 是用于处理异步操作的对象,表示一个可能在将来某个时间点完成的操作。它有三种状态:pending(进行中)、fulfilled(已完成)、rejected(已失败)。
    • 示例
      const fetchData = () => {
          return new Promise((resolve, reject) => {
              setTimeout(() => {
                  resolve('Data fetched!');
              }, 1000);
          });
      };
      
      fetchData().then(data => console.log(data)); // 1秒后输出 "Data fetched!"
      
  • 什么是 async/await?

    • 说明async/await 是基于 Promise 的语法糖,使异步代码看起来更像同步代码。async 声明一个异步函数,await 用于等待 Promise 完成。
    • 示例
      const fetchData = () => {
          return new Promise((resolve) => {
              setTimeout(() => {
                  resolve('Data fetched!');
              }, 1000);
          });
      };
      
      const fetchAsyncData = async () => {
          const data = await fetchData();
          console.log(data);
      };
      fetchAsyncData(); // 1秒后输出 "Data fetched!"
      
  • 解释事件冒泡和事件捕获。

    • 说明事件冒泡是指事件从目标元素向上冒泡到父元素的过程;事件捕获是指事件从父元素向下传播到目标元素的过程。可以通过 addEventListener 的第三个参数控制。
    • 示例
      <div id="parent">
          <button id="child">Click me</button>
      </div>
      
      <script>
      const parent = document.getElementById('parent');
      const child = document.getElementById('child');
      
      parent.addEventListener('click', () => {
          console.log('Parent clicked');
      }, false); // false 为冒泡,true 为捕获
      
      child.addEventListener('click', () => {
          console.log('Child clicked');
      }, false);
      </script>
      
  • 什么是节流(throttling)和防抖(debouncing)?

    • 说明节流是指限制某个函数在一定时间内只能执行一次;防抖是指在事件触发后等待一段时间,如果在这段时间内又触发了事件,则重新计时。

    • 示例(节流)

      function throttle(fn, delay) {
          let lastTime = 0;
          return function(...args) {
              const now = Date.now();
              if (now - lastTime > delay) {
                  lastTime = now;
                  fn.apply(this, args);
              }
          };
      }
      
    • 示例(防抖)

      function debounce(fn, delay) {
          let timer;
          return function(...args) {
              clearTimeout(timer);
              timer = setTimeout(() => {
                  fn.apply(this, args);
              }, delay);
          };
      }
      
  • 解释浅拷贝和深拷贝的区别。

    • 说明浅拷贝只复制对象的第一层属性,若属性是引用类型,复制的是地址;深拷贝则递归复制所有层级的属性。

    • 示例(浅拷贝)

      const original = { a: 1, b: { c: 2 } };
      const shallowCopy = Object.assign({}, original);
      shallowCopy.b.c = 3;
      console.log(original.b.c); // 3 (原对象也受到影响)
      
    • 示例(深拷贝)

      const original = { a: 1, b: { c: 2 } };
      const deepCopy = JSON.parse(JSON.stringify(original));
      deepCopy.b.c = 3;
      console.log(original.b.c); // 2 (原对象没有受到影响)
      
  • 上一篇:叉尖避障新科技:因泰立科技ILS-T52三维深度成像激光雷达


    下一篇:【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据-封装有参CDS为无参CDS,从而对应数据库视图