[ES6] ES6 新特性之声明变量

ES5ES6
var 关键字声明变量let 关键字声明变量
全局作用域全局作用域
函数作用域块级作用域

ES5 中

var 关键字声明变量

var v = 100; // 在全局作用域中
function fn() {
    // 在函数作用域中 - 只能在当前函数作用域中访问
    var w = 10;

    console.log(v); // 100

    console.log(w); // 10
}

console.log(v) //100

fn();
console.log(w); // w is not defined

注意:在 ES5 中没有块级作用域

if (true) {
    var v = 100; // 全局作用域
}
console.log(v); // 100

ES6 中

let 关键字声明变量

if (true) {
    // 块级作用域 - 定义的变量只能在当前块级作用域中被访问
    let v =100; 
}
console.log(v); // v is not defined

letvar 的区别

letvar
全局作用域、函数作用域和块级作用域全局作用域、函数作用域
不允许声明提前声明提前
不允许重复声明允许重复声明

作用域

全局作用域

var m = 100; // 全局变量 - 在全局作用域中定义
let n = 1000; // 全局变量- 在全局作用域中定义

console.log("var"+m); // var100
console.log("let"+n); // let1000

函数作用域

function fn() {
    // 在函数作用域中定义
    var j = 100;
    let k = 1000;

    console.log("var" + j); // var100
    console.log("let" + k); // let1000
}

fn();
console.log("var" + j); // j is not defined
console.log("let" + k); // k is not defined

块级作用域

if (true) {
    // 在块级作用域定义
    var j = 100;
    let k = 1000;

    console.log("内部var" + j); // 内部var100
    console.log("内部let" + k); // 内部let1000
}
console.log("外部var" + j); // 外部var100
console.log("外部let" + k); // k is not defined

声明提前

概念看代码

var 关键字定义变量-存在声明提前的现象

console.log(m); // undefind
var m = 10;

等同于

var m; // 只声明变量,并不初始化-默认值为undefined
console.log(m); // undefind
m = 10;  // 初始化变量 - 赋值

let 关键字定义变量时-不存在声明提前

console.log(v); // v is not defind
let v = 10; 

暂时性死区

ECMAScript 6 标准明确规定,如果在一个代码块中使用 letconst 声明变量或常量时,当前代码块中对这些声明的变量或常量形成了一个封闭的作用域。

就是 letconst 没有声明提前给的一个名词

重复声明

var 允许重复声明

var v = 100;
console.log(v); // 100
var v = 1000; // 重复声明
console.log(v); // 1000

let 不允许重复声明

let v = 100;
console.log(v); // 100
let v = 1000; // 重复声明 - SyntaxError: Identifier 'v' has already been declared
console.log(v); // 

let 虽然不允许重复声明,但是允许重复赋值

let v = 100;
console.log(v); // 100
 v = 1000; // 重复赋值
console.log(v); // 1000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值