web面试(一)Javascript

怎样理解原型、原型链?

每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。关系:obj.constructor.prototype = obj.__proto__ ,特点: JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

js的面向对象编程特性,以及继承方式有哪些?

什么是防抖与节流,分别的作用,怎么实现?

防抖指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率,对于节流,一般有两种方式可以实现,分别是时间戳版和定时器版。

什么是高阶函数、纯函数?

高阶函数:是对其他函数进行操作的函数,可以将它们作为参数或返回它们。简单来说,高阶函数是一个函数,它接受函数作为参数或函数作为输出返回。

JS中内置了一些常用的高阶函数,例如:Array.prototype.map,Array.prototype.filter和Array.prototype.reduce等等。

例如:使用Array的sort函数,sort接收一个函数作为参数。实现为数组arr排序。

纯函数:简单来说,满足下面两个条件就称为纯函数,

  1. 一个函数的返回结果只依赖于它的参数
  2. 函数在执行过程里面没有任何副作用【不会造成外部变量的改变】

var、let、const的区别。

var是ES5提出的,let和const是ES6提出的。

const声明的是常量,必须赋值

  1)一旦声明必须赋值,不能使用null占位。

  2)声明后不能再修改

  3)如果声明的是复合类型数据,可以修改其属性

let和var声明的是变量,声明之后可以更改,声明时可以不赋值

var允许重复声明变量,后一个变量会覆盖前一个变量。let和const在同一作用域不允许重复声明变量,会报错。

var声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined。

let和const不存在变量提升。即它们所声明的变量一定要在声明后使用,否则报ReferenceError错。

var不存在块级作用域。let和const存在块级作用域。

ES5中作用域有:全局作用域、函数作用域。没有块作用域的概念。

ES6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。

defer与async的区别如下:

  • 相同点: 异步加载 (fetch),都只适用于外部脚本文件
  • 不同点:

    async 加载(fetch)完成后立即执行 (execution);

    defer 加载(fetch)完成后延迟到 DOM 解析完成后才会执行(execution)**,但会在事件 DomContentLoaded 之前

    async执行没有顺序,defer有顺序

 

原文地址:https://www.cnblogs.com/kunmomo/p/15129223.html