let 和 const 命令

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"
    1. 参数声明
    function bar(x = y, y = 2) {
           return [x, y];
             }
           bar(); // 报错
        function bar(x = 2, y = x) {
              return [x, y];
            }
          bar(); // [2, 2]
    1. 定义声明
    // 不报错
               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');
};

转载于:https://www.cnblogs.com/95CC/p/7405854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值