ES6知识点,面试题

  1. Es6声明变量的六种方法

Var、function、let、const、import、class

     2.var、let、cost的区别

  1. 作用域规则

Let/const声明的变量属于块级作用域,只能在其块或子块中可用。而var声明的变量的作用域是全局或者局部作用域  整个封闭函数

        重复声明/重复赋值

var可以重复声明重复赋值

let仅允许重复赋值,但不能重复声明

const既不可以重复声明,也不能重复赋值

        变量提升(hosited)

var声明的变量存在变量提升,既可以在变量声明前访问变量,值为undefined

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

        暂时死区(TDZ)

var不存在暂时性死区

在代码块内使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal  dead  zone,简称TDZ)。暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了

3.为什么需要块级作用域?

Es6只有全局作用域函数作用域,没有块级作用域,这带来很多不合理的场景。

第一种场景,内层变量可能会覆盖外层变量

第二种场景,用来计数的循环变量泄露为全局变量

Es6允许块级作用域的任意嵌套。

内层作用域可以定义外层作用域的同名变量。

块级作用域的出现,实际上使得获得广泛应用的匿名立即执行函数表达式

4.解构赋值

Es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值

如果解构不成功,则值为undefined;不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组;如果右边不是数组则会报错,比如,右边是{}、false/true、数字、null、undefined、NaN;添加默认值,如果赋值为undefined,则使用默认值。如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值,

默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

      5.对象的解构赋值

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。

6.函数的扩展

  1. 默认值
  2. rest参数 ...变量名

Es6引入rest参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。Rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

注意,rest参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。

 3.严格模式

  1. 设定全局性的严格模式,这是合法的
  2. 把函数包在一个无参数的立即执行函数里面

       7.箭头函数:是一种更加简便函数写法

      Es6 允许使用“箭头”(=>)定义函数。

let函数名 = (参数)=>函数体

箭头函数适合用在与this无关的回调函数,比如:数组的方法、计时器

箭头函数不适合用在与this有关的回调函数,比如:事件绑定、事件监听、构造函数、对象的方法

箭头函数的简便写法

  1. 当参数只有一个时,()可以省略
  2. 当函数体只有一行代码时,{}可以是省略,当这一行代码是返回值时,return可以省略

        8.箭头函数的this指向

        箭头函数中的this是静态的,指向定义它的地方,而不是调用它的地方,指向定义箭头函数时所在的作用域下的this的值。

  1. 全局环境下,通过let、const、var定义的箭头函数指向window
  2. 对象的方法写为箭头函数,函数中的this指向对象所在的作用域中this的值
  3. 箭头函数中的this,不可以通过call和apply或者bind修改
  4. 不可以作为构造函数实例对象,箭头函数不可以使用new关键词
  5. 在箭头函数中不可以使用arguments

你可能感兴趣的:(面试,javascript,jquery)