🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

0 篇文章

JavaScript 中的短路计算是什么?

2019-02-05 回答由于逻辑表达式的运算顺序是从左到右,并且他可以提前结束。使用这一规则便可进行短路计算。true||false 以上使用逻辑或的示例中,由于表达式的计算结果为 true,JavaScript 并不会计算执行第二个操作 false。这就是短路计算。这也适用于逻辑与 false&&true 在逻辑运算过程中如果有一个表达式执行抛出异常,程序也不会受到影响,如:true||nonexistent

typeof

2019-02-06 提问以下代码的执行结果是什么?typeoftypeof0 回答执行结果为 stringtypeof0 返回字符串 number,因此 typeof'number'的结果为 string。加分回答 typeof 可能的返回值类型结果 undefinedundefinednullobjectbooleanbooleannumbernumberstringstringSymbol()symbol 函数 fu

什么是 JavaScript 数据类型?

2019-02-07 回答最新的 ECMAScript 标准定义了 7 种数据类型,其中含有 Boolean、Null、Undefined、Number、String 和 Symbol6 种原始类型和 Object 非原始类型。加分回答 Array、Date 和 function 都是 object 类型。Symbol 是 ES6 中新引入的原始数据类型,Symbol()可创建独一无二的值。函数在 JavaScript 中具有可调用能力的对象

`var`、`let`、`const` 和没有关键字的声明有什么区别?

2019-02-08 回答无关键字在变量赋值之前如果没有关键字的话,则会把变量分配给全局变量或覆盖已经声明的变量。在非严格模式下,如果变量还没有被声明的话,他将会把变量做为全局对象(浏览器中的 window)的一个属性。在严格模式下,他将抛出异常以防止创建不需要的全局变量。varvar 是 ES2015 以前声明变量的默认语句。他在函数作用域内创建的变量可以在该作用域中被重新赋值和重新声明。但是,由于缺少块作

什么是大 O 符号?

2019-02-09 回答大 O 符号在计算机科学中用来描述算法的时间复杂度。执行速度快且复杂性低的算法视为优秀的算法。算法的运行次数并不是每次都相同,大部分取决于所提供的数据。在某些情况下,他们执行的很快,但某些情况下,他们却执行的很慢(哪怕他们的数据是一样多)。以下示例中,我们假设基准时间为:1element=1msO(1)arr[arr.length-1]//1000elements=1ms 时间复

什么是闭包?请给出一个有用的示例

2019-02-10 回答闭包是一个定义在其他函数内部的函数,他由函数及创建该函数的词法环境组合而成,这个环境包含了这个闭包创建时所能访问的所有局部变量。闭包可以访问三种作用域中的变量:自身函数内声明的变量父函数作用域中的变量全局中声明的变量在 JavaScript 中所有函数都是闭包的,因为他们都可以访问外部作用域,但是大部分函数都没有充分利用闭包的优势:状态持久化。因此闭包有时也被称为一个有状态的函数

什么是事件驱动编程?

2019-02-11 回答事件驱动编程是一种涉及通过发送和接受事件来构建应用程序的范式。当程序触发事件时,他可以通过运行注册到该事件和上下文中的任意回调函数来进行响应,同时还可以将相关数据传递给响应的函数。在这种模式下如果程序没有订阅任何函数,当事件被触发时也不会因为事件被发送到"异次元空间"而抛出错误。一个常见的例子就是 DOM 元素上的事件监听,如 click 和 mouseenter,当点击或鼠标事件发生

什么是函数式编程?

2019-02-12 回答函数式编程是一种编程范式,他使用纯函数来构建声明方式以避免状态的共享、数据的易变及一些副作用。函数式编程的核心是:同一个函数中只要输入相同,其返回值就必然相等,且不会产生任何副作用。大多数程序员认为这是软件开发的最佳方法,因为这可以减少 bug 并增加易读性。加分回答与使用命令式或面向对象编程的代码相比,函数式编程的代码更加简洁、清晰、可预测及易于测试。String.protot

命令式编程和声明式编程有什么区别?

2019-02-13 回答这两种编程可以简单的概括为:命令式编程:如何命令计算机完成声明式编程:我要完成什么声明式编程的一个常见例子是 CSS。开发人员只需要指定 CSS 的属性就可以描述出元素的样子,而不需要去关心如何让他成为这个样子。如何由你来命令浏览器完成。另一方面,命令式编程还涉及完成某些事情所需的步骤。在 JavaScript 中,两者区别如下:命令式编程 constnumbers=[1,2,3,4,5

Memoization 是什么?

2019-02-14 回答 Memoization 是用来缓存函数调用的输出结果,以便减少后续再次调用时的运算,进而加快运算速度的一种优化技术。Memoization 在再次调用有相同输入的同一函数时将直接返回缓存的该函数的输出结果,但第一次的计算当然是必不可少的。JavaScript 对此的一个基本实现如下:constmemoize=fn=>{constcache=newMap()returnvalue=>

对比 Mutable 和 Immutable 及 Mutating 和 Non-Mutating

2019-02-15 回答基本解释如下:Mutable:对象主题可以被修改 Immutable:对象一旦被创建就不能被修改 Mutating:修改对象主题的方法 Non-Mutating:不会使原始对象发生变化的修改方法在 JavaScript 中,对象是可被修改的,但原始值却是不能被修改的。这意味着可以通过执行某些操作来修改对象的原始引用,但对原始值执行任何操作都不能修改他的初始值。所有的 String.pro

JavaScript 中唯一自己不等于自己的值是谁?

2019-02-16 回答 NaN(Not-a-Number)无论使用什么比较运算符进行比较时,他是唯一不等于自身的值。NaN 通常是没有意义的数学计算的结果,因此两个 NaN 值被认为相等是没有意义的。加分回答根据上述,可以简单的实现 isNaN:constisNotNumber=x=>x!==xisNaN()和 Number.isNaN()的区别如下:isNaN(NaN);//trueisNaN('AStri

复合函数

2019-02-17 提问创建一个 pipe 函数,使其通过返回带有一个参数的函数来从左到右依次执行传入的函数 constsquare=v=>v*vconstdouble=v=>v*2constaddOne=v=>v+1constres=pipe(square,double,addOne)res(3)//19;addOne(double(square(3)))回答首先使用展开运算符...让提供的所有参数转换

什么是纯函数?

2019-02-18 回答纯函数是一个满足以下两个条件的函数:给定相同的输入,返回输出结果必须相同在作用域之外不能改变其他数据或提供给函数的数据。纯函数在满足以上两个条件时,允许在自身内部对自己的变量进行改变。纯函数 consta=(x,y)=>x+yconstb=(arr,value)=>arr.concat(value)constc=arr=>[...arr].sort((a,b)=>a-b)非纯函

解释递归及其使用场景

2019-02-19 回答递归描述了用自身相似的方法去重复事物的过程。在 JavaScript 中,递归可以理解为函数重复调用自身直到满足某个基本条件时。递归需要基本条件来打断他的循环,否则函数就会不停的调用自身。在处理包含未知嵌套深度的数据结构时,递归非常有用。例如,数据库返回一些平面数组结构的评论给你,他们在数据库中是通过父子 id 来进行关联的,但需要你在界面上为其展示为嵌套的树形结构。每条评论要么是顶

静态方法和实例方法的区别

2019-02-20 回答静态方法属于一个类,他不能在实例上使用。实例方法属于类的原型,他继承自该类的所有实例并可以在实例上使用。Array.isArray//数组的静态方法 Array.prototype.push//数组的实例方法如果 Array.isArray 方法做为数组的一个实例方法将没有任何意义,因为当他可以正常运行时,我们已经知道这个他是一个数组了。实例方法在技术上可以当作静态方法使用,只是

解释 `this` 关键字并介绍他是如何工作的?

2019-02-21 回答 this 关键字是函数执行过程中用于表示上下文的对象。传统的常规函数可以使用 call()、apply()和 bind()方法来改变他们的 this 值。箭头函数会隐式的绑定 this,因此无论其上下文是否使用 call()进行设置,他的上下文引用都是其词法环境中的上下文。这有一些关于 this 是如何工作的常见例子:Objectliterals 如果使用对象本身调用其内部函数时,该函数的 thi

React, Vue, Angular, Hyperapp 等 JavaScript UI 库或框架的目的是什么?

2019-02-22 回答主要目的是避免直接操作 DOM 并使应用程序的状态能够简单的和 UI 保持同步。此外,他们还提供了创建组件的功能,在有相似功能(具有细小区别)的时候就可以进行重复使用,这样每当需要更新在多个地方重用的组件结构时就可以避免多个地方的重复修改。像 jQuery 这样对 DOM 操作的库,应用程序的数据通常保存在 DOM 自身中,通常作为类名或者 data 的属性。操作 DOM 来更新 UI 涉及许多额外的步骤并

`use strict` 的作用

2019-02-23 回答在你的 JavaScript 源文件开头包含'usestrict'可以启用严格模式,该模式强制开启了更为严格的 JavaScript 代码解析和错误处理。他被认为是一种很好的实践,为开发者提供了以下便捷之处:通过抛出错误来消除了一些原有的静默错误,让调试更加容易。修复了一些导致 JavaScript 引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快。提高 J

虚拟 DOM 是什么,库或者框架中为什么要使用他?

2019-02-24 回答虚拟 DOM(VDOM)是使用 JavaScript 普通对象来描述真实 DOM 的展现方式。这些对象具有描述真实 DOM 节点的属性,比如:节点名称,他的属性和子节点。<divclass="counter"><h1>0</h1><button>-</button><button>+</button></div> 上面的 DOM 元素使用虚拟 DOM 可以如下进行表示:{nodeName:"div"