es6

es6初始
es6就是js
准确来说 es6是js的语法规范
之前 所学的是js第5代版本
es6(ECMAscript)是 2015年6月 由欧洲工业标准组织 所以制定新的一套 js语法标准 也算是js第6套版本
ECMAscript 6.0 简称es6
es6 是 js的标准
js是es6的实现
es6 中提供了模块化开发的语法 主要应用于 企业级复杂的web开发
对数组 对象 字符串 都进行了一些方法扩展 提供 了几个新的数据类型
es6实现同步的效果
2.let_const
let
console.log(i)
for(var i=0;i<10;i++){
console.log(i);
var a = i;
}
console.log(i);结果10
console.log(a);结果9

i和a都能取到 说明js中 用var 在for中声明的变量 可以在外部访问

for(let i=0;i<10;i++){
console.log(i);
let a =i;
}
console.log(i);//报错
在js/es6中 用let 在for找那个声明的变量 无法在外部访问

var a =0;
let a = 1;
console.log(a);
let 声明的变量 变量名不能重复
而且必须先声明后使用
换句话来说 let没有变量的提升和变量的污染染
块级作用域 相D当与局部作用域
在js中 只有函数才能创造一个局部作用域
但是 在es6中 只要 是个{} 他都是局部作用域(块级作用域)
{
var a =0;
let b =1;
}
console.log(a);//10
console.log(b);//报错 找不到
let a = 0;
{
cosole.log(a);
let a = 1;
console.log(a);//1
}
console.log(a);//0
在js中 全局变量 可以在局部环境下使用 局部不能再全局下使用
在es6 中 全局 可以在 局部环境下使用 局部也只能在局部使用
而且 全局声明的变量 跟局部环境的变量 没有任何关系
变量名 都可以一样
let 声明的变量 只能在当前作用域使用
const关键字 在es6中 用来 声明静态常量
常量 所有字母必须全部大写
const PI = 3.1415926;
console.log(PI);
PI = 0;
console.log(PI)//报错 常量无法修改
const ABC; 常量在声明必须赋值 不然会报错
console.log(ABC);//常量在声明是必须赋值
const 在作用域特性上 个let完全一样
var c = 0;
let aaa =1;
console.log(window);
var 声明的变量 是写在了 window 对象上 是window 的属性或方法
let 声明的变量 跟window 完全没有关系
let ppp =123;
function fn1(p){
let a = p;
console.log(a)
}
fn1(ppp)

解构赋值

正常赋值
let x= 0;
let y =1;
解构赋值
let(x,y)=[0,1];
本质上就是一种模式匹配
只要等号两边的模式相同 左边的变量 就会赋予相对应的值
let [a,[b1,b2],c] =[0,[1,2],3];
console.log(a);
console.log(b1);
console.log(b2);
console.log(c);
let [a,,b]=[1,2,3]
console.log(b);按位置匹配
let [aaa=100]= [1000];//a=1000;
let[a=100] = [,1000];//a=100
console.log(a);//结果 a =100; 解构中的默认值

let obj ={
names:'张三',
age:18,
sex:'女',
data:[0,1,2,3,4],
say:function(){
console.log('你好我是张三')
}
}
es5的写法
var name1 = obj.name;
var age1 = obj.age;
es6解构赋值 解构对象时
变量名 必须和属性名相同 但是 顺序没有要求
以对象的形式解构数组
let arr = [1,2,3,4,5]

let{
[0]:a,
[4]:b,
}=arr;

当对象中 含有数组时
let obj = {
data:[0,1,2,3,4]
}
let{
data,//以变量取出相对应的值 变量名必须和属性名相同
data:arr,//以属性名 取出 相对应键值对的值 并保存在变量arr中
data:[a,b,c,d,e]//将上一步中的arr彻底解构
}= obj;
console.log(a)
console.log(b)
console.log(c)
console.log(d)
console.log(e);
当对象中含有数组 数组内又有对象
let obj = {
data:[{
age:1,
},{
name:2,
}]
}
let {data:[{age},{name}]} = obj;
console.log(age,name)

let str = 'hellow';
let [a,b,c] =str;
let{
[0]:d,
}=str
console.log(a,b,c,d);
解构赋值 解构字符串 会将字符串当做一个数组来解构

函数的扩展

形参默认参数
function fn1(x){
var a = x || 10;//js中默认值
}
function fn2(x=10){
var a= x;//es6中 默认值;
consolle.log(x);
}
形参默认值 不是赋值 而是惰性传值
function fn3(x){
var x= 0;
let x= 0;
console.log(x)

在es6中 不能用let或const声明与形参重复的变量或常量
其实 不管是在es6 还是js中 形参跟变量名都尽量不要重复
}
fn3(10)

箭头函数

普通函数
命名函数
function fn1(a){
console.log(a)
}
//字面量的形式
var fn2 = function(a){
console.log(a)
}
箭头函数
两个参数
var fn3 = (a,b)=>{
console.log(a,b)
}
fn3(10,11)
一个参数可以省略括号
var fn4 = a =>{
console.log(a)
}
fn4(2)

没有参数
没有参数 不能省略括号
var fns =()=>{
console.log(123)
}
//返回值
function aa(){
return 123;
}
let aa1 = ()=>123;箭头函数

箭头函数中如果只有一条 return 语句
则可以省略 大括号
如果这个箭头函数 还有且只有一个形参
则小括也可以省略

let aa1=a=>a+1;
function b(){
return function(a){
return a+1;
}
}
let b =()=>a=>a+1;//b 没有参数 就是一个括号
var a =b();
a(12)
let b1 = b()(1);
console.log(b1)
btn.onclick = function(){
console.log(this);//标签
}
btn1.onclick=()=>{
console.log(this)//window
}
//一般绑定事件函数的时候 不要使用 箭头函数
btn.onclick = function(){
setInterval(function(){
console.log(this);//window
},3000)
}
btn1.onclick = function(){
setInterval(()=>{
console.log(this);标签本身
},300)
}
btn.onclick = function(){
btn1.onclick =()=>{
console.log(this);//btn
}
}
当内部韩大户使用 箭头函数时 不会改变 外部函数到this指向
//总结
普通函数 谁调用 this指向谁
箭头函数 自己被定义时 定义的环境中的this指向谁 我的this就执行谁

let obj = {
say:function(){
console.log(this);//obj
},
eat:()=>{
console.log(this);window
}
}
console.log(obj.say());
console.log(obj.eat())
构造函数
给对象定义方法 不要使用 箭头函数
function Dog(){
this.say = function(){
console.log(this)
}
this.eat =()=>{
console.log(this)
}
}
let f1 = new Dog()
f1.say();
f1.eat();

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • ES5和ES6 我们所说的 ES5 和 ES6 其实就是在 js 语法的发展过程中的一个版本而已 比如我们使用的微...
    蜗牛的愿望正在缓冲中阅读 230评论 0 0
  • 1、es5和es6的区别,说一下你所知道的es6 ECMAScript5,即ES5,是ECMAScript的第五次...
    没糖_cristalle阅读 684评论 0 0
  • ES5 严格模式 使用方式:在代码最前面加 "use strict" 优点: 1.代码规范了2.效率提高了 对代码...
    新生勿扰阅读 923评论 0 2
  • ES6新增特性 【说明】ES5和ES6是javascript语法发展过程中的新增版本,对一些语法及功能性方法作了增...
    time_刚刚好阅读 2,366评论 0 5
  • 1.es5数组新增方法 1.1:some方法先遍历数组,如果至少有一个元素满足条件,则返回true,否则返回fal...
    林大咩阅读 192评论 0 0