Zhao Tian 博客

let 和 const 命令

2017-12-30 13:27:50


ES6 声明变量的六种方法

ES5 只有两种声明变量的方法:var命令和function命令。ES6除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有6种声明变量的方法。

let 命令

ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

使用

  1. for循环使用 (不会产生全局变量 )
  2. 不存在变量提升 存在暂时性死区问题形式

    1. 提前声明

        //会报异常不会报未定义
          typeof x; // ReferenceError
          typeof y; // "undefined"
      
    2. 参数声明

      function bar(x = y, y = 2) {
          return [x, y];
            }
          bar(); // 报错
       function bar(x = 2, y = x) {
             return [x, y];
           }
         bar(); // [2, 2]
      
    3. 定义声明

      // 不报错
              var x = x;
              // 报错
              let x = x;
              // ReferenceError: x is not defined
      

不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。

Const 命令

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。

关于使用

  1. const声明一个只读的常量。一旦声明,常量的值就不能改变。
  2. const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
  3. const声明的常量,也与let一样不可重复声明。

块级作用域

作用

  1. 防止内层变量可能会覆盖外层变量。
  2. 用来计数的循环变量泄露为全局变量。

块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

// IIFE 写法
(function () {
  var tmp = ...;
  ...
}());
// 块级作用域写法
{
  let tmp = ...;
  ...
}

块级作用域与函数声明

ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。

顶层对象的属性

顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5之中,顶层对象的属性与全局变量是等价的。

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

global 对象

获取全局对象的方法

// 方法一
(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');
};

修改时间 2017-12-30 14:41:32| 阅读(26) |评论(0) |返回首页

评论