1、模板字符串
es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点。
第一个用途,基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定。
es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点。
第一个用途,基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定。
第二个用途,在ES5时我们通过反斜杠(\)来做多行字符串或者字符串一行行拼接。ES6反引号(``)直接搞定。
//以前的写法
var str='javasrcipt\
is\
amazing';
console.log(str)
---------------------------------
var str=`javasrcipt
is
amazing`;
console.log(str)
---------------------------------
//变量相连
var userName='aaa'
console.log('hello'+userName)
console.log(`hello ${userName}`)
console.log('hello this is\''+'\"amazing\"' +userName)
console.log(`hello this is "amazing" ${userName}`)
2、什么是闭包?
当函数可以记住并访问所在的词法作用域时,就产生了闭包
3、什么是异步?
任何时候,只要把一段代码包装成一个函数,并指定他在响应某个事件( 定时器,鼠标点击,ajax响应等 )(还有回调)
时执行,就在代码中创建了一个将来执行的块,这就是一个异步程序
//同步程序,必须等待前面的代码执行完成之后,才会执行到这里
for(var i=0;i<10000000;i++){}
console.log(i)
//异步
//javascript是单线程编程语言,基于事件循环(事件循环队列,先进先出,后进后出)
function show(){
console.log('aaa')
}
setTimeout(show,1000);
console.log('abc')
//循环中的异步
//先输出5,然后再同时输出5个5
//同时把5个定时器加到队列中,都要在一秒之后完成,但是1秒后的i已经变成5了,同时输出,非隔一个输出
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i) //5个5
},1000)
}
console.log(i) //5
//利用立即表达式(闭包),让i存下来不会被改变
for(var i=0;i<5;i++){
(function(j){
setTimeout(function(){
console.log(j) //0 1 2 3 4
},1000)
})(i)
}
console.log(i) //5
4、Promise( 承诺 )
//将来发生的事情:可以拿到汉堡(但不是绝对的,可能卖完了)
var oPromise=new Promise(function(resolve,reject){
setTimeout(function(){
console.log('制作汉堡中');
resolve('汉堡做好了');
reject('汉堡卖完了')
},2000)
});
oPromise.then(function(val){
console.log(val)
},function(data){
console.log(data)
})
特性:异步机制
var oPromise=new Promise(function(resolve,reject){
console.log('创建promise');
//异步代码
resolve('ok');
});
oPromise.then(function(val){
console.log(val)
})
console.log('promise外部的代码')
//执行顺序:
//创建promise
//promise外部的代码
//ok
promise有3种状态:pending,resolve,reject(开始创建都是pending,只要执行相应的resolve或者reject都要相应改变状态),
状态改完后是改不回来的(已经有resolve,再输入个reject,也不会改成reject状态)
var oPromise1=new Promise(function(resolve,reject){
resolve(1);//没有定时器,立即执行,把pending改为resolve状态
})
var oPromise2=new Promise(function(resolve,reject){
setTimeout(function(){
resolve(2);
},500)
})
var oPromise3=new Promise(function(resolve,reject){
setTimeout(function(){
reject(3);
},500)
})
console.log(oPromise1)
console.log(oPromise2)
console.log(oPromise3)
setTimeout(function(){
console.log(oPromise2)
},1000)
setTimeout(function(){
console.log(oPromise3)
},1000)
oPromise1.then(function(value){
console.log(value)
})
oPromise2.then(function(value){
console.log(value)
})
oPromise3.then(function(err){
console.log(err)
})
链式调用与语法糖
var oPromise=new Promise(function(resolve,reject){
resolve(1);
})
oPromise.then(function(value){
console.log(value); //1
return value*2;//return new Promise(function(resolve,reject){ resolve(value*2)}
}).then(function(value){
console.log(value); //2
}).then(function(value){
console.log(value); //undefined
//return Promise.resolve('resolve') //return new Promise(function(resolve,reject){ resolve('resolve')}
return 'resolve'
}).then(function(value){
console.log(value); //resolve
return Promise.reject('reject') //return new Promise(function(resolve,reject){ reject('reject')}
}).then(function(value){
console.log(value)
},function(err){
console.log(err) //reject
})
all和race
//all(全部执行完成才停止)
function task(delay) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(delay);
}, delay);
});
}
var startDate = Date.now();
// 所有promise变为resolve后程序退出
Promise.all([ //里面的是一个个promise的任务
task(1), //这个任务是1秒钟后变为resolve状态
task(32), //这是32
task(64),
task(128)
]).then(function (values) {
console.log(Date.now() - startDate + 'ms');
// >= 128ms
console.log(values); // [1,32,64,128]
});
-------------------------------------------------
//race(只要有一个执行完就停止)
function task(delay) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(delay);
}, delay);
});
}
// 任何一个promise变为resolve或reject 的话程序就停止运行
Promise.race([
task(1),
task(32),
task(64),
task(128)
]).then(function (value) {
console.log(value); //1
});
5、import、export (模块管理机制)
扫描二维码关注公众号,回复:
4600784 查看本文章
a.js( import导入 )----> b.js( export 导出 )
require js, seajs...
①安装 babel-cli 、babel-preset-es2015
②建议文件 .babelrc
{
"presets": [
"es2015"
],
"plugins":[]
}
例子:
a.js
//单个导出
//导出变量
export var a=10
//导出函数
export function show(){
return 'hhhhh'
}
------------------------------
//多个导出
var a=10
function show(){
return 'hhhhh'
}
var obj={
'userAge':20
}
export{a,show,obj}
b.js
//import {a as c} from './a.js' 改变名字
//import {a,show,obj} from './a.js'
//import {*} from './a.js' 整个导出
import * as all from './a.js'
//console.log(a)
//console.log(show())
//console.log(obj.userAge)
console.log(all.a)
console.log(all.show())
console.log(all.obj.userAge)
命令行 babel-node b.js