ECMAScript 6入门读书笔记一

2018-10-21 admin

let

也是用来声明变量,但是不同于var,个人理解是它是用来修复var的一些神奇效果,似的变量更加规范,简单来说let定义的变量就是私有变量,有以下几点作用

  • let声明的变量只在它所在的代码块中生效(即它的块级作用域中生效)
if (true) {
    let i;
    console.log(i);
}
//console.log(i);  ReferenceError: i is not defined
  • 对于for循环的块级作用域,当let声明循环体i时,有两个特点

  • let声明的i外部不能被访问

    for (let i = 0; i < 4; i ++) {
            console.log(i);
        }
    console.log(i);  //i is not defined
    

    之所以里面能访问i,因为for循环子作用域能访问外部作用

  • for循环当在子作用域,声明let i时与循环体i是独立的

    for (let i = 0; i < 4; i ++) {
            let i = 6;
            console.log(i);
        }
    

    为什么能,简单说就是i私有了

  • 每次循环let都是重新申明的,正因为这样,就能解决for循环时闭包带来的问题

    for (let i = 0; i < 4; i ++) {
            setTimeout(function () {console.log(i)}, 100)
        }
    //0 1 2 3
    for (var i = 0; i < 4; i ++) {
            setTimeout(function () {console.log(i)}, 100)
        }
    //4 4 4 4
    
  • 不存在变量提升,

    //console.log(i);
    //console.log(typeof i);
    let i;
    

    都是会报错的,i is not defined。 对于let声明的变量,typeof 不再是安全形式了,并且该变量必须在声明后才能使用,在它之前使用那就是暂时的死区

    function f(x=y,y=2) {};
    f(); //y is not defined
    let x = x; //x is not defined
    
  • 同一作用域中也不能重复定义

    let i;
    let i;  //报错
    
    function f(n) {
        let n
    }
    f();  //报错
    

    不同作用域可以重复且各自独立

    function f(n) {
       {let n}
    }
    
  • let声明的变量不属于window

    let i = 1;
    console.log(window.i); //undefined
    

const作用是用来声明常量

作用和let一样,但多两点

  • 一旦声明必须初始化,也就是必需赋值,否则报错;

    const P = 1;
    
  • 一旦赋值不能被改变,其本质是不能改变变量的内存地址 变量是原始类型的数据,其本身就是不可变的,再加上不能重新赋值,改变地址

    const P = 1;
    P = 2;   //报错
    

    变量是对象类型的,其本身是可变的,所以也就能改变,要注意的是其地址并不改变

    const P = {a : 1} ;
    P.a =2;
    console.log(P);  //{a : 2}
    

    想要其内容也不变,可以冻结它

    const P = {a : 1} ;
    Object.freeze(P);
    P.a =2;
    console.log(P);
    

原文链接:https://segmentfault.com/a/1190000016752229

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-43277.html

文章标题:ECMAScript 6入门读书笔记一

相关文章
jQuery的一些技巧大放送
1、关于页面元素的引用 通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。 2、jQuery对象与d...
2015-11-11
2015年2月国内操作系统市场份额概况,xp占46.29%,
规则调整:2012年6月1日开始,Mac操作系统中不再包含ipad、iphone市场份额。 ...
2015-11-12
JS生成一维码(条形码)功能示例
本文实例讲述了JS生成一维码(条形码)功能的方法。分享给大家供大家参考,具体如下: 1、js代码: (function() { if (!exports) var exports = window; var BARS = [212...
2017-03-01
Node.js v0.11.16 开发版发布
Node.js v0.11.16 开发版发布了,改进记录包括: openssl: Upgrade to 1.0.1l npm: Upgrade to 2.3.0 url: revert support of path for url.fo...
2015-11-12
Webpack(含 4)配置详解——从 0 配置一套开发模板
前言 源代码 熟悉 webpack 与 webpack4 配置。 webpack4 相对于 3 的最主要的区别是所谓的零配置,但是为了满足我们的项目需求还是要自己进行配置,不过我们可以使用一些 webpack 的预设值。同时 webpack...
2018-05-02
Ajax入门手册chm
下载地址:Ajax入门手册chm ...
2015-11-12
ECMAScript
JavaScript和ECMAScript规范 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Assocication)通过ECMA-262标...
2015-11-12
js获取数组的最后一个元素
在js里面如何获取一个数组的最后一个元素呢?这里总结了两种方法,有需要的朋友可以看看。 (1)js内置pop方法 pop() 方法用于删除并返回数组的最后一个元素,注意这里在获取了数组的最后一个元素的同时也将原数组的最后一个元素给删除了。如...
2017-03-22
回到顶部