ES6

let const var区别

1、let是es6新增的声明变量的方式 ,其特点是:
1.作用域是块级作用域(在ES6之前,js只存在函数作用域以及全局作用域)

if(1){
   let a=1;
   console.log(a)
 }

2.不存在变量声明提前;

  console.log(b); //ReferenceError: b is not defined
     let b=2;

3.不能重复定义

 let a=1;
 let a=2;
console.log(a);//Identifier 'a' has already been declared

4.存在暂时性死区:可以这样来理解

var a=1;
if(1){
 console.log(a); 
  let a=2;
}

① 在一个块级作用域中,变量唯一存在,一旦在块级作用域中用let声明了一个变量,那么这个变量就唯一属于这个块级作用域,不受外部变量的影响;
② 无论在块中的任何地方声明了一个变量,那么在这个块级作用域中,任何使用这个名字的变量都是指这个变量,无论外部是否有其他同名的全局变量;
③ 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
④ 暂时性死区的意义:让我们标准化代码。将所有的变量的声明放在作用域的最开始。

2、 const

一般用来声明常量,且声明的常量是不允许改变的,只读属性,因此就要在声明的同时赋值。const与let一样,都是块级作用域,存在暂时性死区,不存在变量声明提前,不允许重复定义

const A=1;(重新给常量A赋值会报错 )
A=3; // Uncaught TypeError: Assignment to constant variable.(错误:赋值给常量)

3 var 是es6之前 js用来声明变量的方法,其特性是:

1.var的作用域是函数作用域,在一个函数内利用var声明一个变量,则这个变量只在这个函数内有效

function test(){
 var a=1;
console.log(a);//函数未调用 输出的是undefined  函数调用输出的是1 
}
console.log(a);//ReferenceError:a is not defined

2.存在变量声明提前(虽然变量声明提前,但变量的赋值并没有提前,因此下面的程序不会报错,但a的值为undefined)

function test(){
 console.log(a);//undefined
 var a=3/a=3(隐式声明)
}

promise

  • Promise 是一个 构造函数,既然是构造函数, 那么,我们就可以 new Promise() 得到一个 Promise 的实例;
  • 在 Promise 上,有两个函数,分别叫做 resolve(成功之后的回调函数) 和 reject(失败之后的回调函数)
  • 在 Promise 构造函数的 Prototype 属性上,有一个 .then() 方法,也就说,只要是 Promise 构造函数创建的实例,都可以访问到 .then() 方法
  • Promise 表示一个 异步操作;每当我们 new 一个 Promise 的实例,这个实例,就表示一个具体的异步操作;
  • 既然 Promise 创建的实例,是一个异步操作,那么,这个 异步操作的结果,只能有两种状态:
    5.1 状态1: 异步执行成功了,需要在内部调用 成功的回调函数 resolve 把结果返回给调用者;
    5.2 状态2: 异步执行失败了,需要在内部调用 失败的回调函数 reject 把结果返回给调用者;
    5.3 由于 Promise 的实例,是一个异步操作,所以,内部拿到 操作的结果后,无法使用 return 把操作的结果返回给调用者; 这时候,只能使用回调函数的形式,来把 成功 或 失败的结果,返回给调用者;
  • 我们可以在 new 出来的 Promise 实例上,调用 .then() 方法,【预先】 为 这个 Promise 异步操作,指定 成功(resolve) 和 失败(reject) 回调函数;
    注意:这里 new 出来的 promise, 只是代表 【形式上】的一个异步操作;
    什么是形式上的异步操作:就是说,我们只知道它是一个异步操作,但是做什么具体的异步事情,目前还不清楚

1.一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)
2.一个promise的状态只可能从“等待”转到“完成”态或者“拒绝”态,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换
3.promise必须实现then方法(可以说,then就是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致
4.then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。同时,then可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable对象。

Promise 优缺点
有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。

Promise 也有一些缺点。

  • 首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。
  • 其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  • 第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

ES6—箭头函数()=>{} 与function的区别

1.箭头函数与function定义函数的写法:

//function
function fn(a, b){
    return a + b;
}
//arrow function
var foo = (a, b)=>{ return a + b };

2.this的指向:
使用function定义的函数,this的指向随着调用环境的变化而变化的,而箭头函数中的this指向是固定不变的,一直指向的是定义函数的环境。

 // 使用function定义的函数
    function foo(){
        console.log(this);
    }
    var obj = { aa: foo };
    foo(); //Window
    obj.aa() //obj { aa: foo }
    使用function定义的函数中this指向是随着调用环境的变化而变化的

   //使用箭头函数定义函数
   var foo = () => { console.log(this) };
   var obj = { aa:foo };
  foo(); //Window
  obj.aa(); //Window
  **明显使用箭头函数的时候,this的指向是没有发生变化的。**

3.构造函数

//使用function方法定义构造函数
function Person(name, age){
    this.name = name;
    this.age = age;
}
var lenhart =  new Person(lenhart, 25);
console.log(lenhart); //{name: 'lenhart', age: 25} 
//尝试使用箭头函数
var Person = (name, age) =>{
    this.name = name;
    this.age = age;
};
var lenhart = new Person('lenhart', 25); //Uncaught TypeError: Person is not a constructor 
**function是可以定义构造函数的,而箭头函数是不行的。**

4.变量提升
由于js的内存机制,function的级别最高,而用箭头函数定义函数的时候,需要var(let const定义的时候更不必说)关键词,而var所定义的变量不能得到变量提升,故箭头函数一定要定义于调用之前!

foo(); //123
function foo(){
    console.log('123');
}

arrowFn(); //Uncaught TypeError: arrowFn is not a function
var arrowFn = () => {
    console.log('456');
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值