es6小白学习笔记(一)

1.let和const命令

1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域)

 {
     let a = 1;
     var b = 2;
 }
 console.log(a); //a is not defined  let声明的变量只在自己的块内有效
 console.log(b); //2
 var a = [];
 for(avr i = 0; i < 10; i++){
     a[i] = function() {
        console.log(i)
     };
 }   

 a[3](); //  10
 //a[3])() 打印出来是10,i是var声明的,在全局范围内都有效,所以每一次循环,新的i值都会覆盖旧值,所以最后i是10

 var a = [];
 for(let i = 0; i < 10; i++){
     a[i] = function() {
        console.log(i)
     };
 }
 a[3](); //  3
 //a[3]()  打印出来是3,变量i是let声明的,且仅在块级作用域内有效,每个i都是不同的作用域,所以最后输出3

2.不存在变量提升

变量提升的意思是把下边的东西提到上面,在JS中,就是把定义在后面的东西(变量或函数)提升到前面来定义。

eg:  var会存在变量提升

 var v=‘Hello‘;
 (function(){
     alert(v);
     var v=‘World‘;
 })() ;
 //这段代码alert出来的是undefined,就是因为存在变量提升,会把定义提到前面去,赋值不会提升,变量提升之后的代码如下:

 var v=‘Hello‘;
 (function(){
     var v;
     alert(v);
     v=‘World‘;
 })() ;

使用let命令就不会存在变量提升,所以一定要先声明后使用。

3.暂时性死区

ES6明确规定, 如果区块中存在let和const命令, 这个区块对这些命令声明的变量, 从一开始就形成了封闭作用域。 凡是在声明之前就使用这些变
量, 就会报错。

 var tmp = ‘www‘; if (true) {
     tmp = ‘abc‘;   // tmp is not defined
     console.log(tmp);   // tmp is not defined
     let tmp;
     console.log(tmp); // undefined
     tmp = 123;
     console.log(tmp); // 123
 }

es6使用let和const,是为了避免var没有声明就使用所带来的一些问题。

4.不允许重复声明

//以下这几种都会报错
function() {
  let a = 1;
  var a = 2;
}

function() {
  let a = 1;
  let a = 2;
}

function fun( arg ){
  let arg;
}

//不报错,两个arg属于不同的块级作用域
function fun( arg ){
  {
      let arg;
   }    

}    

2.块级作用域

1.在es5中没有块级作用域

//第一种场景:内层变量覆盖外层变量var tmp = new Date();
function f() {
    console.log(tmp);
    if (false) {
    var tmp = ‘hello world!‘
    }
}
f(); //undefined   变量提升,内层变量覆盖了外层变量

//第二种场景:循环变量泄露为全局变量
var s = ‘hello‘;
for (var i = 0; i < s.length; i++) {
    console.log(s[i]);
}
onsole.log(i); // 5    循环结束后 i泄露为全局变量

2.es6的块级作用域,let和const

一对{}就代表一个块级作用域,可以任意嵌套

{{{
    {let aa = ‘hello‘}
    console.log(aa); //报错
}}}

{{{
    {let aa = ‘hello‘}
     let aa = ‘world‘;   //不同的作用域可以定义同名变量
}}}
时间: 2024-10-05 20:46:57

es6小白学习笔记(一)的相关文章

linux小白学习笔记(一)常用基础命令

ls                                    查看文件 (相当于dos下的dir)(其后可加路径,加 -a,可以查看隐藏文件) cd                                  改变当前路径(与dos下相同,cd +所在目录内文件夹名(相对路径),cd+/新路径(绝对路径),cd+..进入上个目录,cd进入根目录) clear                              清屏ls (相当于dos下的cle) 命令 “+ ”——he

ES6 class学习笔记

ES5中生成实例对象的方法是通过构造函数: function Person(name, age){ this.name = name this.age = age } Person.prototype.sayName = function () { console.log(this.name) } ES6中添加新的语法生成对象实例: class Person { constructor (name, age) { this.name = name this.age = age } sayName

node es6 babel学习笔记

npm install babel-cli -g //安装babel babel index.js -o a.js //等同于 babel index.js --out-file a.js 复制index.js为a.js babel src/ -d build/ //等同于 babel src/ --out-dir build/ 复制src目录下所有文件到 build目录下 //------------------------------ //babel命令放到pageage中,方便调用 pac

ES6 Generator 学习笔记一

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态.  执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态. 形式上,Generator 函数是一个普通函数,但是有两个特征.一是,f

linux文档的打包和压缩 3月27日学习笔记

linux文档的打包和压缩 一.gzip:压缩工具 gzip只能压缩文件,不可以压缩目录后面直接跟要压缩的文件就可以进行压缩. 文件压缩后默认会带一个后缀名,作用是为了区分是什么工具压缩的. 压缩和解压之后源文件都会消失. 1.压缩passwd文件 [[email protected] cheng]# gzip passwd  [[email protected] cheng]# ls passwd.gz 2.gzipz -d:解压文件 [[email protected] cheng]# gz

es6学习笔记初步总结

es6学习笔记初步总结 1. let.const 和 block 作用域 在ES6以前,var关键字声明变量.无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部).这就是函数变量提升例如: let 关键词声明的变量不具备变量提升(hoisting)特性 let 和 const 声明只在最靠近的一个块中(花括号内)有效 当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING const 在声明时必须被赋值 否则报语法错误SyntaxError

ES6学习笔记&lt;三&gt; 生成器函数与yield

为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口(Interface),yield则是生成器函数中表示 返回 或 继续 执行的关键字. 弄清楚这两个概念后,先看一个例子: function* fun(val) { yield 1*val; yield 2*val; yield 3*val; yield 4*val; return 5*val; }

WEB前端学习笔记 一

最近时间比较充裕,整理了一下学习过的笔记,此篇笔记包含了:Html.Css.JavaScript.Jquery.以及使用帝国CMS或是织梦CMS建立自己的网站,也许也会整理一下PHP的笔记,如果时间允许会整理完全. 虽然笔记是从最基础的开始,但是,并不包含电脑的基础知识,所以你必须已经掌握了一些电脑的基本操作,比如开关机,你的电脑用的是什么操作系统,至少也要会用word和wps吧.浏览器是做什么的,什么拷贝.复制.粘贴.知道最基本的文件类型,如,文本文件,视频文件,图片文件,什么是可执行文件,分

Android属性动画初步学习笔记

近期学习Android属性动画和VetcorDrawable实现属性动画,以此记录一下学习笔记. 首先是属性动画,小白没截过动态图,方三张静态图吧       效果是点击红色图片,7个选项以属性动画的方式弹出并旋转,最后成一个1/4圆弧排列,再次点击则收回到红色原点下. 布局文件很简单,就是一个RelativeLayout下八个ImageView: 1 <?xml version="1.0" encoding="utf-8"?> 2 <Linear