ES6学习笔记

var 和 let 的区别:

  1. 作用域:
    var 声明变量会造成变量的作用域混乱,所以尽量不用var声明变量
    let 声明变量引入了块级作用域,(即{}作用域)

    • 示例1
// 声明了全局变量a,b
var a = 'hello',b = 'world';

// 声明函数fn()
function fn(){
  //编译后,这里有一句隐藏的 var a;
  console.log(a); // 在函数域中找到了变量a的声明,未赋值,所以输出为undefined
  console.log(b); // 在函数域中没有找到b的声明,所以到上层域中找到b的声明,输出为 world

  var a = 'this'; // 在函数域中声明a,并且var a 声明提前,即函数先阅读var a,再执行console

  console.log(a); // 输出 this
}

fn();

console.log(a); //函数作用域只在函数体内有效,所以此处a为全局作用域的值,输出 hello

上面的例子不明显,示例2会明显看到var声明变量作用域的混乱

  • 示例2
for(var i=0;i<10;i++){} // 这里声明的了变量 i

console.log(i) // 这里的i没有声明,所以会找 for函数里的i,输出为 10

PS:还没理清关系,以下内容无效
2. 变量声明
var 声明提前
let 没有声明提前

PS:
var _a是babel(一个将ES6转为ES5的转换器)将let a 转换的结果,然后你通过a就访问不到了,其实两者之间是不等价的,因为ES5不支持let这个语法,却要支持let这个语法,所以将let a编译为var _a,这个_a不是固定的,会是_bcd,也可能是_addksdjflsdfjkdsdlsdk,一大串,目的是通过a这个变量访问不到。

to be continue

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值