一.var、let、cost的区别
①.作用域规则
Let/const声明的变量属于块级作用域,只能在其块或子块中可用。
var声明的变量的作用域是全局或者局部作用域 整个封闭函数
②.重复声明/重复赋值
var可以重复声明和重复赋值
let仅允许重复赋值,但不能重复声明
const既不可以重复声明,也不能重复赋值
③.变量提升(hosited)
var声明的变量存在变量提升,既可以在变量声明前访问变量,值为undefined
Let和const不存在变量提升,即它们所声明的变量一定要在声明后使用,否则报错 ReferenceError
④.暂时死区(TDZ) var不存在暂时性死区 Let和const存在暂时性死区
二.暂时性死区 Es6明确规定,如果区块中存在let和const命令,这个区块对这些 命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内使用let命令声明 变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
三.get、post区别?
Get: 方式需要使用Request,QueryString 来取得变量的值;
Post: 方式通过RequestForm 来访问提交的内容;
Get:方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;
Post:传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击。
建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 Post 方法;
Get: 方式提交数据,会带来安全问题,比如一个登陆页面,通过 Get 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码,所以表单提交建议使用 Post 方法;
get:是从服务器上获取数据,
post:是向服务器传送数据。
get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式。
四.对箭头函数的了解,箭头函数的优缺点?
箭头函数是匿名函数,ES5匿名函数的语法糖,并且没有自己的this,arguments,super或 new.target。
它的优点是:
(1)简洁的语法、
(2)隐士返回,减少代码量
(3)解决了this的指向问题,
它的缺点是:
(1)做为构造函数的时候不能使用箭头函数
(2)真正需要this的时候如给元素绑定click事件的时候,执行的回调函数不能使用箭头函数。
(3)我们需要使用arguments对象的时候不能使箭头函数。箭头函数中没有arguments对象。
五. 箭 头 函 数 与 普 通 函 数 的 区 别 ?
(1)定义的形式不同。
(2)箭头函数全都是匿名函数。
(3)普通函数的this指向调用者,箭头函数的 this 永远指向其上下文的this,任何方法都改变不了箭头函数this指向,如 call() , bind() , apply()
(4)箭头函数不具有prototype属性,新建的对象的隐式原型无法被指定为箭头函数的原型
(5)箭头函数不能用于构造函数
(6)箭头函数不能Generator函数
(7)箭头函数不具有arguments对象
六. 简 单 说 一 下 a s y n c / a w a i t 的 了 解 ?
①:async/await是写异步代码的新方式,它是generator的语法糖
②:async/await是基于Promise实现的,它不能用于普通的回调函数。
③:async/await与Promise一样,是非阻塞的。
④:async/await使得异步代码看起来像同步代码,这正是它的魔力所在。
七、谈谈你对promise的理解
①:Promise用来解决异步回调问题,由于js是单线程的,很多异步操作都是依靠回调方法实现的,这种做法在逻辑比较复杂的回调嵌套中会相当复杂;也叫做回调地狱;promise用来将这种繁杂的做法简化,让程序更具备可读性,可维护性;
②:promise内部有三种状态,pedding,fulfilled,rejected;pedding表示程序正在执行但未得到结果,即异步操作没有执行完毕,fulfilled表示程序执行完毕,且执行成功,rejected表示执行完毕但失败;这里的成功和失败都是逻辑意义上的;并非是要报错。
其实,promise和回调函数一样,都是要解决数据的传递和消息发送问题,promise中的then一般对应成功后的数据处理,catch一般对应失败后的数据处理。