今天开始和大家一起系统的学习ES6+,每天3分钟,用一把斗地主的时间,重学ES6+,今天介绍的是var let 和const。
var foo = "foo"
let bar = "bar"
// const constant(常量/衡量)
const name = "abc"
name = "cba"
// 注意事项一: const本质上是传递的值不可以修改
// 但是如果传递的是一个引用类型(内存地址), 可以通过引用找到对应的对象, 去修改对象内部的属性, 这个是可以的
const obj = {
foo: "foo"
}
obj = {}
obj.foo = "aaa"
console.log(obj.foo)
// aaa
// 注意事项二: 通过let/const定义的变量名是不可以重复定义
var foo = "abc"
var foo = "cba"
let foo = "abc"
// SyntaxError: Identifier 'foo' has already been declared
let foo = "cba"
console.log(foo)
作用域提升: 在声明变量的作用域中,如果这个变量可以在声明之前被访问,那么我们可以称之为作用域提升;
console.log(foo)
var foo = "foo"
// Reference(引用)Error: Cannot access 'foo' before initialization(初始化)
// let/const他们是没有作用域提升
// foo被创建出来了, 但是不能被访问
// 作用域提升: 能提前被访问
console.log(foo)
let foo = "foo"
// ES5中没有块级作用域
// 块代码(block code)
{
// 声明一个变量
var foo = "foo"
}
console.log(foo)
// ES6的代码块级作用域
// 对let/const/function/class声明的类型是有效
{
let foo = "why"
function demo() {
console.log("demo function")
}
class Person {}
}
// console.log(foo) // foo is not defined
// 不同的浏览器有不同实现的(大部分浏览器为了兼容以前的代码, 让function是没有块级作用域)
// demo()
var p = new Person() // Person is not defined
如 if语句的代码就是块级作用域,switch语句的代码也是块级作用域,for语句的代码也是块级作用域
//if语句的代码就是块级作用域
if (true) {
var foo = "foo"
let bar = "bar"
}
console.log(foo)
console.log(bar)
//foo
//Uncaught ReferenceError: bar is not defined
// switch语句的代码也是块级作用域
var color = "red"
switch (color) {
case "red":
var foo = "foo"
let bar = "bar"
}
console.log(foo)
console.log(bar)
// foo
// Uncaught ReferenceError: bar is not defined
// for语句的代码也是块级作用域
for (var i = 0; i < 3; i++) {
console.log("Hello World" + i)
}
console.log(i)
// 3
for (let i = 0; i < 3; i++) {
console.log("Hello World" + i)
}
console.log(i)
// Uncaught ReferenceError: i is not defined
var foo = 'foo'
if(true){
console.log(foo)
// Uncaught ReferenceError: Cannot access 'foo' before initialization
let foo = 'bar'
}
最后,这是我第一次参加更文活动,茫茫人海中,如果有幸遇到你,读到我这篇文章,那真是太好了。我深知还有很多不足,希望大家能多提建议,还是想舔着脸皮,向屏幕前的大帅比们,大漂亮们,恳请一个小小的点赞,这会是对我莫大鼓励。也祝愿点赞的大帅比们,大漂亮们升职加薪走向人生巅峰!
阅读量:2017
点赞量:0
收藏量:0