ES6 (1):const/let

关于ES6  可以到阮一峰大神那学习~ http://es6.ruanyifeng.com/#docs/let

再次个人记录学习的理解,章节就按照阮大神书的顺序一篇篇的记录与练习

历史:

ECMASCRIPT :标准(规格)

JAVASCRIPT:实现

ES5 之后的版本统称为 ES6(ESMASCRIPT2015 之后)

 

一、let/const : let 只在所在的代码块内有效(块级作用域,阻止向上提升,在之前的文章有提到),在箭头函数中亦是如此,在块级作用域中,函数声明语句的行为类似于let,在块级作用域之外不可引用。

但是为了兼容之前的老版本,浏览器的实现可以不遵守上面的规定。

为了在块级作用域内声明函数,应该写成函数表达式,而不是函数声明语句:

表达式:let x = function(){}

声明语句:function x(){}

 

const 是只读常量,其值不能改变(在声明常量时必须初始化,否则报错)。

 

 const 保证的是其保存的内存地址不变,如果不是简单类型数据,则有可能发生变化。

 

二、顶层对象

浏览器:window

Node:global

var /function 声明的是全局变量同样是顶层对象的属性、而let/const/class 声明的全局变量不属于顶层对象。

顶层:

let 不属于顶层

 

 另外顶层对象不统一:

浏览器:window

浏览器和web worker:self 指向顶层对象

node:global

 

为了实现兼容:使用this,但是this有一些小问题需要注意:

全局环境:this 返回顶层对象。node 和es6模块this 指向当前模块

函数中:若不是对象应用或强绑定,那么this 同样执行顶层对象(非严格模式,关于this可以参考之前写的随笔)

new Function('return this')() 返回全局对象。(个人觉得尽量不要用构造器的方式声明函数)

下面是阮大神书中提供方法:

// 方法一
(typeof window !== 'undefined'
   ? window
   : (typeof process === 'object' &&
      typeof require === 'function' &&
      typeof global === 'object')
     ? global
     : this);

// 方法二
var getGlobal = function () {
  if (typeof self !== 'undefined') { return self; }
  if (typeof window !== 'undefined') { return window; }
  if (typeof global !== 'undefined') { return global; }
  throw new Error('unable to locate global object');
};

 

posted @ 2019-05-27 14:14  李鹏飞ONLINE  阅读(191)  评论(0编辑  收藏  举报