ES6学习总结一(变量;箭头函数;解构赋值)
一、变量
var
1 可以重复声明(var a=1;var a=7;)(一开始用着会觉得限制很少,但是在大型项目会麻烦,人多嘴杂的时候定义重复了就容易出问题还不好找)
2 无法限制修改
3 没有块级作用域(块指{}以外就不能访问)
function(){
var a=10;
}
alert(a); //
ES6的变量:
let:
不能重复声明(重复声明会报错:a已经声明过了,const也是);
let a=0;
let a=1;
let是变量,可以修改;
let a=0;
a=1;
alert(a); //1
有块级作用域;(const同理)
if(true){
let a=0;
}
alert(a);//报错:a 没定义(a只在语法块起作用)
const:不能重复声明;const是常量,不能修改;有块级作用域;
const a=0;
a=1;
alert(a); //报错
下面来看一个经典的运用场景:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用闭包来解决的问题:利用函数垫了一层作用域</title>
</head>
<body>
<input type="button" value="按钮1">
<input type="button" value="按钮2">
<input type="button" value="按钮3">
</body>
<script>
// window.onload=function(){
// var aBtn=document.getElementsByTagName('input');
// for(var i=0;i<aBtn.length;i++){
// aBtn[i].onclick=function(){
// alert(i);//3 3 3
// };
// }
// }
window.onload=function(){
var aBtn=document.getElementsByTagName('input');
for(var i=0;i<aBtn.length;i++){
(function(i){
aBtn[i].onclick=function(){
alert(i);//0 1 2
};
})(i); }
}
</script>
</html>
但是如果用有块级作用域的let声明i,就直接可以打印出想要的结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let</title>
</head>
<body>
<input type="button" value="按钮1">
<input type="button" value="按钮2">
<input type="button" value="按钮3">
</body>
<script>
window.onload=function(){
var aBtn=document.getElementsByTagName('input');
for(let i=0;i<aBtn.length;i++){
aBtn[i].onclick=function(){
alert(i);//0 1 2
};
}
}
</script>
</html>
二、箭头函数
之前函数写法:
function 名字(){}
ES6写法:
()=>{}
总结:
就是把名字省略,()后增加一个箭头;是之前函数的一种简写,就像var a=new Array()可以简写成var a=[]一样。
如果只有一个参数,()可以省;
如果只有一个return,{}可以省;(注意没有或者多余一个return都不能省)
举例1:
let show=function(a,b){
alert(a+b);
}
let show=(a,b)=>{
alert(a+b);
}
举例2:
let arr=[2,5,1,9,4];
//arr.sort(function(n1,n2){
// return n1-n2;
//}); //arr.sort((n1,n2)=>{
// return n1-n2;
//}); arr.sort((n1,n2)=>return n1-n2); alert(arr);
三、解构赋值
1. 左右两边结构必须一样
2. 右边必须是个东西
3. 声明和赋值不能分开(必须在一句话里完成)
例如:
// 数组
let[a,c,x]=[1,2,3];
console.log(a,c,x);// 1 2 3
// json
let{a,b,c}={a:1,b:2,c:3};
console.log(a,b,c);// 1 2 3
// 复杂一点的
let [{a,b},[n1,n2,n3],num,str]=[{a:12,b:5},[1,3,5],9,'lmx'];
console.log(a,b,n1,n2,n3,num,str);
// 粒度根据实际可更改
let [json,arr,num,str]=[{a:12,b:5},[1,3,5],9,'lmx'];
console.log(json,arr,num,str);
错误写法:
// 左右两边结构不一样
let {a,b}=[1,2];
console.log(a,b);
// 右边不是个东西
let {a,b}={1,2};
console.log(a,b);//Uncaught SyntaxError: Unexpected token ,
// 解构赋值是同步的 不能拆分
let [a,b];//这样定义是不标准的
[a,b]=[1,2];
console.log(a,b);// Uncaught SyntaxError: Missing initializer in destructuring declaration
ES6学习总结一(变量;箭头函数;解构赋值)的更多相关文章
- ES6 (一)变量声明方法 & 解构赋值
就是最新的JavaScript 原来的是var,要求不严格,不能限制修改,函数级 es6要求严格 1.防止重复声明 let 变量=var const 常量 2.控制修改 const常量不能修 ...
- 001-es6变量声明、解构赋值、解构赋值主要用途
一.基本语法 1.1.声明变量的六种方法 参看地址:http://es6.ruanyifeng.com/#docs/let let:局部变量,块级作用域,声明前使用报错 var:全局变量,声明前使用 ...
- 【ES6】对象的新功能与解构赋值
ES6 通过字面量语法扩展.新增方法.改进原型等多种方式加强对象的使用,并通过解构简化对象的数据提取过程. 一.字面量语法扩展 在 ES6 模式下使用字面量创建对象更加简洁,对于对象属性来说,属性初始 ...
- JS变量作用域与解构赋值
用var变量是有作用域的 变量在函数内部声明时,那么该变量只属于整个函数体,函数外不可调用 当两个不同的函数里,使用了用一个相同的变量名,二者不互相影响,相互独立 遇到嵌套函数时,外部函数不可调用内部 ...
- ES6学习之变量的解构赋值
前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...
- ES6学习随笔--字符串模板、解构赋值、对象、循环、函数、Promise、Generrator
在线编译器:babel.github 在nongjs中使用 'use strict' let a = ; 运行node : node --harmony_destructuring xxx.js 代码 ...
- ES6知识整理(2)--变量的解构赋值
最近准备在业余空闲时间里一边学习ES6,一边整理相关知识.只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是真正的学到了... 上一篇是一个试水,现在接上. 变量提升 看了下朋友回复 ...
- ES6 学习笔记(二)解构赋值
一.数组的解构赋值 1.基本用法 ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,该操作即为解构 如: let [a,b,c]=[1,2,3]; console.log(a,b,c) ...
- ES6学习-5 解构赋值(2)对象的解构赋值
啥也不说,先举个栗子: 1 let { myname, myage } = { myage: 18, myname: "郭郭" }; 2 console.log(myname) / ...
- ES6-变量的解构赋值复习+学习
ES6------变量的解构赋值 由于之前学过ES6的解构赋值,但是只是略看了一点网上的视频,所以今天就看了看ES6对这一部分的详细介绍,然后做一个总结的笔记. 首先,先大概说一下什么是变量的解构赋值 ...
随机推荐
- abp允许跨域代码,时间转换为固定格式,本地时间
在Global的 Application_BeginRequest方法中: Thread.CurrentThread.CurrentCulture = new CultureInfo("z ...
- PHP入门学习精要
一.文件名 函数.配置文件等其他类库文件之外的一般是以.php为后缀(第三方引入的不做要求): ThinkPHP的模板文件默认是以.html 为后缀(可以通过配置修改): 二.其它命名 其它命名 规则 ...
- JavaScript的this和作用域
本文主要讨论一下JS的作用域和this关键字.作用域,就是你的方法或者变量可访问的区域,是他们执行的上下文.如果你见过这样的代码: function someFunc() { var _this = ...
- Redux:从action到saga
前端应用消失的部分 一个现代的.使用了redux的前端应用架构可以这样描述: 一个存储了应用不可变状态(state)的store 状态(state)可以被绘制在组件里(html或者其他的东西).这个绘 ...
- FineUICore已发布,跨平台速度快(现在可申请试用)!
为什么选择ASP.NET Core 2.0?=================== 速度快,ASP.NET Core 的运行速度是 ASP.NET 4.6 的 6 - 23倍. 跨平台,可在Windo ...
- 网络基础Cisco路由交换一
VLAN概述 Virtual LAN(虚拟局域网)是物理设备上链接的不受物理位置限制的用户的一个逻辑组,. 引用VLAN: 交换机分割了冲突域,但是不能分割广播域,随着交换机端口数量的增多,网络中广播 ...
- CSRF与xss的区别
CSRF:无法获取受害者的cookie,无法看到cookie: 只是利用受害者是被服务器信任的(靠验证cookie),而给服务器发送请求: xss:利用cookie只是xs ...
- php session 和cookie
先简单的说明下session和cookie的区别. 1.session存放在服务器的文件中,或者是内存中.而cookie存在客服端. 2.session比cookie安全 3.session存放在服务 ...
- 个性化WinPE封装方法 ----最后实战“制作WinPE3.0图文教程”
经过前几讲,主要目的就是准备一些"原材料",熟悉一些"命令",实际上是"战前演练准备".下面要进入"实战状态",成败在此 ...
- freemarker获取封装类中对象的属性
freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...