设为首页 加入收藏

TOP

2018年,Top 26 JavaScript面试问题和答案(一)
2018-10-23 00:05:57 】 浏览:90
Tags:2018年 Top JavaScript 面试 问题 答案

根据Stack Overflow的2018年度调查,java script连续六年成为最常用的编程语言。所以我们必须面对这样的现实,java script已经成为全栈开发技能的基石,在全栈开发面试中都会不可避免地涉及到与java script有关的问题。FullStack.Cafe汇编了最常见的java script面试问题和答案,希望能够帮助读者找到下一份梦想中的工作。


Q1:java script中的强制转型(coercion)是指什么?


在java script中,两种不同的内置类型间的转换被称为强制转型。强制转型在java script中有两种形式:显式和隐式。


这是一个显式强制转型的例子:


这是一个隐式强制转型的例子:


Q2:java script中的作用域(scope)是指什么?


在java script中,每个函数都有自己的作用域。作用域基本上是变量以及如何通过名称访问这些变量的规则的集合。只有函数中的代码才能访问函数作用域内的变量。


同一个作用域中的变量名必须是唯一的。一个作用域可以嵌套在另一个作用域内。如果一个作用域嵌套在另一个作用域内,最内部作用域内的代码可以访问另一个作用域的变量。


Q3:解释java script中的相等性


java script中有严格比较和类型转换比较:


一些简单的规则:


Q4:解释什么是回调函数,并提供一个简单的例子。


回调函数是可以作为参数传递给另一个函数的函数,并在某些操作完成后执行。下面是一个简单的回调函数示例,这个函数在某些操作完成后打印消息到控制台。


Q5:“use strict”的作用是什么?


use strict出现在java script代码的顶部或函数的顶部,可以帮助你写出更安全的java script代码。如果你错误地创建了全局变量,它会通过抛出错误的方式来警告你。例如,以下程序将抛出错误:


它会抛出一个错误,因为x没有被定义,并使用了全局作用域中的某个值对其进行赋值,而use strict不允许这样做。下面的小改动修复了这个错误:


Q6:解释java script中的null和undefined


java script中有两种底层类型:null和undefined。它们代表了不同的含义:


Q7:编写一个可以执行如下操作的函数。


可以创建一个闭包来存放传递给函数createBase的值。被返回的内部函数是在外部函数中创建的,内部函数就成了一个闭包,它可以访问外部函数中的变量,在本例中是变量baseNumber。


Q8:解释java script中的值和类型


java script有类型值,但没有类型变量。java script提供了以下几种内置类型:


Q9:解释事件冒泡以及如何阻止它


事件冒泡是指嵌套最深的元素触发一个事件,然后这个事件顺着嵌套顺序在父元素上触发。


防止事件冒泡的一种方法是使用event.cancelBubble或event.stopPropagation()(低于IE 9)。


Q10:java script中的let关键字有什么用?


除了可以在函数级别声明变量之外,ES6还允许你使用let关键字在代码块({..})中声明变量。


Q11:如何检查一个数字是否为整数?


检查一个数字是小数还是整数,可以使用一种非常简单的方法,就是将它对1进行取模,看看是否有余数。


Q12:什么是IIFE(立即调用函数表达式)?


它是立即调用函数表达式(Immediately-Invoked Function Expression),简称IIFE。函数被创建后立即被执行:


在避免污染全局命名空间时经常使用这种模式,因为IIFE(与任何其他正常函数一样)内部的所有变量在其作用域之外都是不可见的。


Q13:如何在java script中比较两个对象?


对于两个非原始值,比如两个对象(包括函数和数组),==和===比较都只是检查它们的引用是否匹配,并不会检查实际引用的内容。


例如,默认情况下,数组将被强制转型成字符串,并使用逗号将数组的所有元素连接起来。所以,两个具有相同内容的数组进行==比较时不会相等:


对于对象的深度比较,可以使用deep-equal这个库,或者自己实现递归比较算法。


Q14:你能解释一下ES5和ES6之间的区别吗?


以下是ES5和ES6之间的一些主要区别:


常量在很多方面与其他语言中的常量一样,但有一些需要注意的地方。常量表示对值的“固定引用”。因此,在使用常量时,你实际上可以改变变量所引用的对象的属性,但无法改变引用本身。


新的ES6关键字let允许开发人员声明块级别作用域的变量。let不像var那样可以进行提升。


默认参数允许我们使用默认值初始化函数。如果省略或未定义参数,则使用默认值,也就是说null是有效值。


ES6引入了对类(关键字class)、构造函数(关键字constructor)和用于继承的extend关键字的支持。


for…of语句将创建一个遍历可迭代对象的循环。


promise提供了一种机制来处理异步操作结果。你可以使用回调来达到同样的目的,但是promise通过方法链接和简洁的错误处理带来了更高的可读性。


问题15:解释java script中“undefined”和“not defined”之间的区别


在java script中,如果你试图使用一个不存在且尚未声明的变量,java script将抛出错误“var name is not defined”,让后脚本将停止运行。但如果你使用typeof undeclared_variable,它将返回undefined。


在进一步讨论之前,先让我们理解声明和定义之间的区别。


“var x”表示一个声明,因为你没有定义它的值是什么,你只是声明它的存在。


“var x = 1”既是声明又是定义(我们也可以说它是初始化),x变量的声明和赋值相继发生。在java script中,每个变量声明和函数声明都被带到了当前作用域的顶部,然后进行赋值,这个过程被称为提升(hoisting)。


当我们试图访问一个被声明但未被定义的变量时,会出现undefined错误。


当我们试图引用一个既未声明也未定义的变量时,将会出现not defined错误。


Q16:匿名和命名函数有什么区别?


Q17:java script中的“闭包”是什么?举个例子?


闭包是在另一个函数(称为父函数)中定义的函数,并且可以访问在父函数作用域中声明和定义的变量。


闭包可以访问三个作用域中的变量:


innerFunction是在outerFunction中定义的闭包,可以访问在outerFunction作用域内声明和定义的所有变量。除此之外,闭包还可以访问在全局命名空间中声明的变量。


上述代码的输出将是:


Q18:如何在java script中创建私有变量?


要在java script中创建无法被修改的私有变量,你需要将其创建为函数中的局部变量。即使这个函数被调用,也无法在函数之外访问这个变量。例如:


要访问这个变量,需要创建一个返回私有变量的辅助函数。


Q19:请解释原型设计模式


原型模式可用于创建新对象,但它创建的不是非初始化的对象,而是使用原型对象(或样本对象)的值进行初始化的对象。原型模式也称为属性模式。


原型模式在初始化业务对象时非常有用,业务对象的值与数据库中的默认值相匹配。原型对象中的默认值被复制到新创建的业务对象中。


经典的编程语言很少使用原型模式,但作为原型语言的java script在
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JavaScript 定时器调用传递参数的.. 下一篇jQuery发起get/post请求_或_获取h..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }