加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

JavaScript九大面试问题集锦,助你顺利通关!

发布时间:2019-07-19 23:15:37 所属栏目:优化 来源:读芯术
导读:副标题#e# 人们认为JavaScript是最适合初学者的语言。一部分原因在于JavaScript在互联网中运用广泛,另一部分原因在于其自身特性使得即使编写的代码不那么完美依然可以运行:无论是否少了一个分号或是内存管理问题,它都不像许多其他语言那样严格,但在开始

实际操作中,关键的区别在于函数声明要被提升,而函数表达式则没有。这意味着JavaScript解释器将函数声明移动到其作用域的顶部,因此可以定义函数声明并在代码中的任何位置调用它。相比之下,只能以线性顺序调用函数表达式:必须在调用它之前解释。

如今,许多开发人员偏爱函数表达式有如下几个原因:

  • 首先,函数表达式实施更加可预测的结构化代码库。当然,函数声明也可使用结构化代码库; 只是函数声明让你更容易摆脱凌乱的代码。
  • 其次,可以将ES6语法用于函数表达式:这通常更为简洁,let和const可以更好地控制是否重新赋值变量,我们将在下一个问题中看到。

5. var,let和const有什么区别?

自ES6发布以来,现代语法已进入各行各业,这已是一个极其常见的面试问题。Var是第一版JavaScript中的变量声明关键字。但它的缺点导致在ES6中采用了两个新关键字:let和const。

这三个关键字具有不同的分配,提升和域 - 因此我们将单独讨论。

(1) 分配

最基本的区别是let和var可以重新分配,而const则不能。这使得const成为不变变量的最佳选择,并且它将防止诸如意外重新分配之类的失误。注意,当变量表示数组或对象时,const确实允许变量改变,只是无法重新分配变量本身。

Let 和var都可重新分配,但是正如以下几点应该明确的那样,如果不是所有情况都要求更改变量,多数选择中,let具有优于var的显著优势。

(2) 提升

与函数声明和表达式(如上所述)之间的差异类似,使用var声明的变量总是被提升到它们各自的顶部,而使用const和let声明的变量被提升,但是如果你试图在声明之前访问,将会得到一个TDZ(时间死区)错误。由于var可能更容易出错,例如意外重新分配,因此运算是有用的。请看以下代码:

  1. var x = "global scope"; 
  2.  
  3. function foo() { 
  4.   var x = "functional scope"; 
  5.   console.log(x); 
  6.  
  7. foo(); // "functional scope" 
  8. console.log(x); // "global scope" 

这里,foo()和console.log(x)的结果与预期一致。但是,如果去掉第二个变量又会发生什么呢?

  1. var x = "global scope"; 
  2.  
  3. function foo() { 
  4.   x = "functional scope"; 
  5.   console.log(x); 
  6. foo(); // "functional scope" 
  7. console.log(x); // "functional scope" 

尽管在函数内定义,但x =“functional scope”已覆盖全局变量。需要重复关键字var来指定第二个变量x仅限于foo()。

(3) 域

虽然var是function-scoped(函数作用域),但let和const是block-scoped(块作用域的:一般情况下,Block是大括号{}内的任何代码,包括函数,条件语句和循环。为了阐明差异,请看以下代码:

  1. var a = 0; 
  2. let b = 0; 
  3. const c = 0; 
  4. if (true) { 
  5.   var a = 1; 
  6.   let b = 1; 
  7.   const c = 1; 
  8. console.log(a); // 1 
  9. console.log(b); // 0 
  10. console.log(c); // 0 

在条件块中,全局范围的var a已重新定义,但全局范围的let b和const c则没有。一般而言,确保本地任务保持在本地执行,将使代码更加清晰,减少出错。

6. 如果分配不带关键字的变量会发生什么?

如果不使用关键字定义变量,又会如何?从技术上讲,如果x尚未定义,则x = 1是window.x = 1的简写。

要想完全杜绝这种简写,可以编写严格模式,——在ES5中介绍过——在文档顶部或特定函数中写use strict。后,当你尝试声明没有关键字的变量时,你将收到一条报语法错误:Uncaught SyntaxError:Unexpected indentifier。

7. 面向对象编程(OOP)和函数式编程(FP)之间的区别是什么?

JavaScript是一种多范式语言,即它支持多种不同的编程风格,包括事件驱动,函数和面向对象。

编程范式各有不同,但在当代计算中,函数编程和面向对象编程最为流行 - 而JavaScript两种都可执行。

(1) 面向对象编程

OOP以“对象”这一概念为基础的数据结构,包含数据字段(JavaScript称为类)和程序(JavaScript中的方法)。

一些JavaScript的内置对象包括Math(用于random,max和sin等方法),JSON(用于解析JSON数据)和原始数据类型,如String,Array,Number和Boolean。

无论何时采用的内置方法,原型或类,本质上都在使用面向对象编程。

(2) 函数编程

FP(函数编程)以“纯函数”的概念为基础,避免共享状态,可变数据和副作用。这可能看起来像很多术语,但可能已经在代码中创建了许多纯函数。

输入相同数据,纯函数总是返回相同的输出。这种方式没有副作用:除了返回结果之外,例如登录控制台或修改外部变量等都不会发生。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读