ES6重新学习(1)

1、CONST

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "Goodbye!";
const age = 30;

但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

2、顶层对象属性

var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩

var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1

let b = 1;
window.b // undefined

上面代码中,全局变量avar命令声明,所以它是顶层对象的属性;全局变量blet命令声明,所以它不是顶层对象的属性,返回undefined

参考文章:http://es6.ruanyifeng.com/#docs/let

时间: 2024-10-24 03:49:24

ES6重新学习(1)的相关文章

js 模块化的一些理解和es6模块化学习

模块化 1 IIFE 2 commonjs 3 浏览器中js的模块化 4 简单理解模块加载器的原理  5 es6 之前在参加百度前端技术学院做的小题目的时候,自己写模块的时候 都是写成立即调用表达式(IIFE)的模式,比如单个功能的时候当时想到是不会涉及到全局变量的污染,在封装基础的模块(比如里面的表单验证功能) (function(win){ var obj = {}; function add() { console.log("add"); } obj.add = add; win

ES6深入学习记录(三)编程风格

今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 var ES6 提出了两个新的声明变量的命令: let 和 const.其中,let 完全可以取代 var,因为两者语义相同,而且 let 没有副作用. 上面代码如果用 var 替代 let,实际上就声明了两个全局变量,这显然不是本意.变量应该只在其声明的代码块内有效,var 命令做不到这一点. va

ES6深入学习记录(二)promise对象相关

1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步的操作)的结果.从语法上说,Pormise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API.各种异步操作都可以用同样的方法进行处理. Promise对象的两个特点: 1.对象的状态不受外界影响.Promis

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() { cons

【Todo】【转载】ES6的学习记录

粗略看了一遍React的内容,然后看了 ES6 的入门文章: http://es6.ruanyifeng.com/#docs/intro 通过这个链接可以查看浏览器对 ES6 的支持程度: http://ruanyf.github.io/es-checker/

es6 基础学习一 let

1.基本用法 let声明的变量,只在let命令所在的代码快有效: { let a = 1; var b = 1; } b //1 a //referenceError: a is not defind ps: 说明es5没有块级作用域,导致if,for等循环语句声明的变量或变量赋值,外泄块级以外的环境.如: var i = 100; for(var i = 0; i < 10; i++){} i;//9 而es5通常的做法是,利用匿名函数来解决: var i = 100; (function()

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

ES6标准学习: 1、let 与 const 命令

1.let命令 一.基本用法 首先看下面一段代码: var a = [] for (var i = 0; i < 10; i++) { a[i] = function () { return i } } a.map(fn => { console.log(fn()) }) 以上代码的运行结果可能是什么? 0, 1, 2, ... 9  ? 结果是:连续输出了10次 10 简单的解释就是,当使用map遍历a中的每一个fn时,当fn执行时,在作用域链上查找i时,找到的i是最终已经变成了10的i,而

es6基础学习二 const

es5是没用常量声明这个选项,es6将其添加其中. 1.基本用法 const 声明一个只读常量.一旦申明,常量的值就不能改变. const PI = 3.1415; PI = 3; //SyntaxError const 声明的变量,一旦声明必须初始化(即赋值),否则报错. const foo; // syntaxError 除此之外,const的声明常量类似let声明的变量: a> 不存在变量提升 b> 只在声明所在的块级作用域内有效 c> 不能重复用var.let.const声明 e