【JavaScript 开发】2022 年 JavaScript 面试题

Chinese, Simplified

JavaScript 面试题



注意:在进行 JS 面试问题之前,请详细阅读以下 JS 主题:

- 面向对象的 JavaScript (OOP)

- JavaScript 如何在屏幕后面运行

  • 1. ES6 中有哪些新的 JS 特性?

- https://github.com/lukehoban/es6features

  • 2. JS是sync还是Async?

- JavaScript 始终是同步和单线程的。如果您在页面上执行 JavaScript 代码块,则当前不会执行该页面上的其他 JavaScript。

  • 3.JS 中的 Sync 和 Async 有什么区别?

- 异步代码在主程序流程之外获取语句,允许异步调用之后的代码立即执行而无需等待。

- 链接 — https://rowanmanning.com/posts/javascript-for-beginners-async/

  • 4.如何优化JS代码的性能?
  • 5.什么是备忘( memoization)。实现用于记忆的 JS 代码。
  • 6.什么是绑定?为绑定实现 pollyfill。
  • 7.为:map、reduce、filter、promise 编写 polyfill
  • 8.什么是纯函数?
  • 9.shim 和 polyfill 有什么区别?

- https://2ality.com/2011/12/shim-vs-polyfill.html

  • 10.什么是 IIFE(立即调用函数表达式)( (Immediately Invoked Function Expressions))?
  • 11.JavaScript 中的强制(Coercion )是什么?

- https://developer.mozilla.org/en-US/docs/Glossary/Type_coercion

  • 12.高阶函数的定义是什么?
  • 13.什么时候使用绑定功能?
  • 14.什么是柯里化(Currying)?

- https://www.tutorialspoint.com/what-is-currying-in-javascript

  • 15.你能举一个咖喱(curry )函数的例子吗?为什么这种语法有优势?
  • 16.解释 Javascript 中的提升(Hoisting )是什么?

- JavaScript 提升是指编译器在执行代码之前为变量和函数声明分配内存的过程。使用 var 进行的声明使用默认值 undefined 进行初始化。使用 let 和 const 进行的声明不会作为提升的一部分进行初始化。

  • 17.解释原型(Prototype )设计模式?
  • 18.比较 Async/Await 和 Generators 的使用以实现相同的功能?

- https://medium.com/dailyjs/a-simple-guide-to-understanding-javascript-e…

  • 19.await 关键字和 yield 关键字有什么区别?
  • 20.是否可以将 ECMAScript 6 生成器重置为其初始状态?
  • 21.如何在 JavaScript 中深度冻结(deep-freeze)对象?

我们可以使用 JavaScript 提供的 Object.freeze() 方法来防止通过更新和删除现有属性来添加新属性。

链接——https://www.geeksforgeeks.org/how-to-deep-freeze-an-object-in-javascrip…

  • 22. JavaScript 是按引用传递还是按值传递语言?

- JavaScript 总是按值传递,所以改变变量的值永远不会改变底层的原语(字符串或数字)。然而,当一个变量引用一个包含数组的对象时,该值就是对该对象的引用。

https://medium.com/nodesimplified/javascript-pass-by-value-and-pass-by-…

  • 23. 什么是 JS 中的 JIT 和事件循环?

事件循环有一项简单的工作——监控调用堆栈和回调队列。如果调用堆栈为空,事件循环将从队列中取出第一个事件并将其推送到调用堆栈,调用堆栈有效地运行它。

链接——https://blog.sessionstack.com/how-javascript-works-event-loop-and-the-r…

  • 24.JS 中的闭包是什么?

闭包是捆绑在一起(封闭)的函数与对其周围状态(词法环境)的引用的组合。换句话说,闭包让你可以从内部函数访问外部函数的作用域。在 JavaScript 中,每次创建函数时都会在创建函数时创建闭包。

Question Link — https://dev.to/levimeahan/closures-scope-and-the-settimeout-for-loop-question-5bl6

https://coderbyte.com/algorithm/3-common-javascript-closure-questions#

  • 25.使用箭头函数有什么好处?
  • 26.JS 中的数组和字符串方法及其参数?
  • 27.windows.onload 与 onDocumentReady 有什么区别?
  • 28.ForEach() 和 map() 的区别?
  • 29.JS中的回调函数是什么?
  • 30.什么是回调地狱?
  • 31.什么是承诺(promises )以及承诺(promises )如何运作?
  • 32.事件冒泡和事件捕获之间的区别?
  • 33.js中2+‘2’和2-‘2’的输出?

https://www.toptal.com/javascript/interview-questions

https://www.interviewbit.com/javascript-interview-questions/#coding-pro…

  • 34. JS中set方法和map方法的区别?

- Map 是元素的集合,其中每个元素都存储为键、值对。 Map 对象可以同时保存对象和原始值作为键或值。当我们遍历 map 对象时,它以与插入相同的顺序返回键值对

- JavaScript map set() 方法用于添加或更新元素以映射具有特定键值对的对象。每个值都必须有一个唯一的键。

  • 35. 软件开发模型——KISS、SOLID、POC、DRY、MVP 等
  • 36. 什么是 javascript 中的 debounce 和 throttling?
  • 37. JS中SetTimeout和SetInterval的区别?
  • 38、如何使用ClearInterval & ClearTimeout?
  • 39. 为什么在 JS 中引入了 let 和 const?
  • 40. NaN 和 undefined 有什么区别?
  • 41. 阅读逻辑与 (&&) 和逻辑或 (||) -> 短路评估

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND

# 请按以下顺序阅读以下主题:

  • 1.‘this’关键字

链接——https://www.w3schools.com/js/js_this.asp

  • 2. Call、Apply 和 Bind 方法及其与 ‘this’ 关键字的使用
  • 3. JS 中的闭包

闭包是函数和声明该函数的词法环境的组合。该环境由创建闭包时在范围内的任何局部变量组成。

闭包是捆绑在一起(封闭)的函数与对其周围状态(词法环境)的引用的组合。换句话说,闭包让你可以从内部函数访问外部函数的作用域。在 JavaScript 中,每次创建函数时都会在创建函数时创建闭包。

链接 — https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

  • 4. JS 中的柯里化(Currying )

https://www.tutorialspoint.com/what-is-currying-in-javascript

  • 5. 编写 sum(1)(2)(3) 和 sum(1,2,3) 的柯里化代码
  • 6. 为什么需要Bind、调用和应用?

# Devesh JS 采访资料:https://devesh-kr-sri.medium.com/javascript-3497a26e5e5a



# 重要话题:

  • 1. 高级 JavaScript 实践
  • 2. 面向对象编程
  • 3. 函数式编程
  • 4. 范围和执行上下文
  • 5. 继承+原型链
  • 6、最新特性:ES6、ES7、ES8、ES9、ES10、ES2020
  • 7. 闭包
  • 8. 异步 JavaScript + 事件循环
  • 9. JavaScript 模块
  • 10.`this`关键字
  • 11. JavaScript 引擎和运行时
  • 12. 错误处理
  • 13. 堆栈溢出
  • 14. 内存泄漏
  • 15. 组合与继承
  • 16.类型强制
  • 17. 按引用传递与按值传递
  • 18. 高阶函数
  • 19. IIFE
  • 20. .call()、.apply()、.bind()
  • 21.解释器/编译器/ JIT编译器
  • 22. 垃圾收集
  • 23. 吊装
  • 24. JavaScript 最佳实践

# 数组方法:https://www.freecodecamp.org/news/the-javascript-array-handbook/

#LinkedIn 技能评估测验 — https://github.com/Ebazhanov/linkedin-skill-assessments-quizzes

Promise Example:

function GetUserDetails() {

    return new Promise(function(resolve, reject) {

        console.log(“Fetching data, Please wait…..”);

        setTimeout(() = >{

            fetch(“https: //jsonplaceholder.typicode.com/todos/1")

            .then(response = >response.json())

            // .then(json => console.log(json))

            // .catch(error => console.log(error));

            .then(json = >resolve(json)).

            catch(error = >reject(error));

        },

        3000);

    });

}

 

原文:https://medium.com/@abhishekbhatti89/javascript-interview-questions-202…

本文:https://jiagoushi.pro/node/1878

SEO Title
JavaScript Interview Questions 2022