20个常见的JavaScript面试问题

44 阅读8分钟

20个常见的JavaScript面试问题

面试招聘过程中的一个重要部分。它可以让人了解一个人的技能、知识和承担挑战性任务的能力。它也是雇主筛选出不适合工作岗位的候选人的最可靠的方法之一。

作为一名JavaScript开发人员,你必须在参加考试或面试前做好准备。这将增加你被知名公司聘用的机会。

现在你可能想知道从哪里开始准备,或者他们在面试中会问什么问题。

因此,为了帮助你,我汇编了一份常见的JavaScript面试问题清单。每个问题都有一个简短的答案,你可以在下面查看。

最后,你会更有信心回答面试官的任何问题。所以,不用多说了,让我们开始吧。


1- 什么是JavaScript?

JavaScript是Netscape公司在1995年创造的一种脚本语言。它最初被用在流行的网络浏览器Netscape Navigator上。但是,如今,我们可以将它用于客户端和服务器端的应用开发。

嗯......我不认为有人会问这个问题,但我们不应该忘记JavaScript的来源。


2- 列出JavaScript的一些优点?

  • JavaScript可以在网络浏览器中离线工作。
  • 它支持多种编程范式。例如,我们可以利用面向对象、功能和强制性的编程概念。
  • 它拥有最大的开源库和框架集合。
  • JavaScript能够创建在线/离线游戏、桌面软件、网站和移动应用程序。
  • 不需要学习单独的编程语言来创建网站的前端和后端。所有主要的网络浏览器都支持JavaScript,它可以使用Node.js在服务器上运行。
  • 它是一种解释性的语言。意味着我们在使用前不需要构建或编译它的代码。JavaScript指令直接执行。

3- 我们应该使用内部还是外部的JavaScript?

当我们只需要在一个网页上使用时,内部JavaScript更适合。而对于有多个网页的网站,总是喜欢用外部的JavaScript文件。


4- 为什么像Autoptimize这样的WordPress插件将JavaScript代码聚集在一个文件中?

将JavaScript源代码聚集在一个文件中,可以减少生成网页时对服务器的请求数量。反过来,它使网站的加载速度更快。

例如,假设我们在一个网页上包含了10个JavaScript文件。现在,当我们打开这个网页时,我们的网络浏览器会向服务器发送10个HTTP请求,以便检索这些文件。另一方面,如果我们把所有这些文件的代码汇总成一个,那么我们只需要向服务器发出一个请求。


5- 什么是JavaScript吊装?

悬挂是JavaScript中的一个概念,它允许我们在变量和函数被声明之前就使用它们。

基本上,当我们执行一段JavaScript代码时,首先它会自动从代码中提取所有的变量和函数声明,并将它们移到其范围的顶部。之后,它开始执行代码。

悬挂的主要好处是,我们的代码可以正常工作,不会显示任何诸如**"未定义变量 ""未定义函数 "的错误。**


6- 预测以下代码的输出?

代码:

username = "Juan Cruz Martinez";
var username; // variable declaration
var username; // redeclared the variable
console.log(username);

输出:

Juan Cruz Martinez

解释:

  • 首先,第2行第3行的变量声明将被视为一条语句。
  • 现在,将应用提升的概念。意思是说,JavaScript将把变量声明移到顶部。在这之后,代码将被执行。
  • 另外,请记住,即使我们重新声明一个变量,存储在该变量中的值也不会丢失。

7- 什么是JavaScript的 "严格模式"?

如果我们犯了一个小错误,JavaScript的默认行为是非常宽容的。这意味着,它不会显示任何错误信息。但是,有时在开发中,我们需要看到各种错误和警告来调试代码。

这里就涉及到JavaScript中 "严格模式 "的使用。基本上,这是一个限制性的变体,JavaScript会显示所有的错误和警告,即使它们是无声的。

我们可以通过在脚本的开头使用"use strict"; 指令来启用 "严格模式"。


8- 有哪些可以替代Svelte的软件?

Svelte是一个JavaScript编程语言的前端开发框架。它的一些流行的替代品包括:-

  • React
  • Vue.js
  • Angular

9- 什么是自调用函数?

自调用函数与普通函数有些不同,因为它们在声明的地方立即执行。

通常情况下,我们先声明一个函数,然后再调用它。但是,JavaScript会在运行时自动执行自调用函数的代码。

需要注意的一点是,这些函数没有任何名字。反过来,我们也无法想起这些类型的函数。它们也被称为 "匿名函数"。

下面是一个自调用函数的例子。

(function (){
	var a = 12;
	var b = 3;
	console.log(a * b);
}());

10- "var"、"let "和 "const "之间有什么区别?

变量let常数
它从一开始就可以在JavaScript中出现。它是JavaScript中声明变量的一种新方式,从ES6开始。const用于存储一个在整个脚本执行过程中不会被改变的值。它也是最近在ES6中引入的。
它有一个全局/函数范围。它有块作用域。它也有块的范围。
可以在其范围内更新或重新声明。我们不能重新声明它们。const代表一个常量值,所以它不能被更新或重新声明。

11- "=="和"=="之间有什么区别?

在JavaScript中,它们都被用来在两个值之间进行比较。

===运算符===运算符
它是一个类型转换操作符它是一个严格的等价运算符
它只用于比较两个值。它对两个值以及它们的类型进行比较。

12- "null "和 "undefined "关键字之间有什么区别吗?

这两个关键字都代表一个空值。但是,nullundefined之间有两个基本区别。

空值未定义
我们声明一个变量,并给它赋值为null我们声明一个变量,但不分配任何值。
(null)的类型 "对象"(undefined)的类型为 "未定义"

13- 区分 "函数声明 "和 "函数表达式"?

基本上,函数声明只不过是使用关键字function 、其独特的名称、参数和函数体来定义一个函数的正常过程。而当我们把一个函数声明分配给一个变量时,它就变成了函数表达式

值得注意的是,函数表达式是不吊销的。这意味着,如果你在定义之前试图调用它们,它们将显示一个错误。

函数声明:

function full_name(first_name, last_name)
{
	return first_name + " " + last_name;
}

函数表达式:

var addition = function add(value_1, value_2)
{
	return value_1 + value_2;
}

14- 什么是闭包?

在JavaScript中,一个闭包是一个在另一个函数中的函数。内层函数可以访问自己的变量、外层函数中定义的变量以及全局变量。

闭包示例:

var a = 2;

function outer()
{
	var b = 4;
	
	function inner()
	{
		var c = 6;
		
		console.log(a + b + c);
	}
	
	inner();
}

outer();

15- 预测这两个函数的输出?它们是否会返回相同的输出?

function user1()
{
	return {
		name: "Juan"
	};
}

function user2()
{
	return
	{
		name: "Juan"
	};
}

console.log(user1());
console.log(user2());

函数user1()的输出

{name: "Juan"}

函数user2()的输出

undefined

16- 什么是NaN?

在JavaScript中,NaN代表**"Not a Number"。**它是一个特殊的值,当我们无法执行一个操作时就会出现。

例如,如果我们试图用一个数字来分割一个字符串(如 "Hello World"/5),会怎么样?


17- 解释一下for-in循环?

for-in循环是专门设计的,它以一步一步的方式循环浏览对象的所有属性。它在每次迭代中从对象中选择一个属性,并对其执行所需的操作。

让我们借助一个例子来理解它。

var user = {
	"name": "Juan",
	"country": "Germany",
	"website": "livecodestream.dev"
};

for(var key in user)
{
	if(user.hasOwnProperty(key))
	{
		console.log(key + " -> " + user[key]);
	}
}

输出:

name -> Juan
country -> Germany
website -> livecodestream.dev

18- 什么是事件泡制和捕获?

在JavaScript DOM中,HTML元素相互嵌套,形成一个层次结构。

现在,如果父元素和子元素都为一个特定的事件注册了一个句柄,那么事件传播的顺序是什么?

它可以通过两种方式确定,即事件冒泡和捕获。

在事件冒泡中,子元素将首先捕获事件,然后将其传播给父元素。而在事件捕获中,父元素将首先捕获事件,然后将其传播给子元素。


19- JavaScript和ECMA脚本之间的区别是什么?

JavaScript是一种脚本语言,而ECMA脚本是一个准则和规则的集合,用于规范不同网络浏览器的JavaScript。


20- 如何用JavaScript创建一个cookie?

在JavaScript中,可以使用document.cookie对象来创建一个cookie。简单地给它分配一个字符串值,就是一系列用分号隔开的键值对。

JavaScript创建Cookie的例子:

document.cookie = "username=Juan; expires=Wed, 03 Oct 2030 12:00:00 UTC; path=/";

总结

雇主们通常会通过问一些棘手的问题来迷惑求职者。因此,如果你没有做好充分的准备,那么你将有可能最终失去机会。

所以,今天,我试图回答一些常见的JavaScript面试问题。你甚至可以在参加面试之前把它作为一个参考。