ES6新增了块级作用域,总结一句话大致就是:大括号{}包起来的代码块基本山都可以当做块级作用域。
常见的有
直接使用{}包起来:
{ var a = 4 }
函数体大括号,if-else大括号,for循环大括号,switch大括号,try-catch大括号等。 需要注意的是,for循环,每一次循环时的{}都是一个独立的块级作用域。
for(let i=0; a < 5; i++){ let j = i }
上面代码循环了五次,实际上有五个独立的j。
日常开发中,我们就可以利用这个特性,来创建块级作用域了。
使用let或const声明的变量只在当前块级作用域生效,出了这个代码块,就无法访问。
{ let a = 5 }console.log(a) // Uncaught ReferenceError: a is not defined
日常开发中,块级作用域中使用的变量,尽量使用let或者const声明。
需要注意的问题:
let和const变量一定要先声明,再使用,避免出错。不要试图利用变量提升的特性。
const声明变量时,一定要初始化,否则会报错。let建议也在声明时初始化。
const声明的变量一旦初始化,以后就不可以在进行赋值操作,但可以对其引用的对象进行更改。
const noChangeMe; // Uncaught SyntaxError: Missing initializer in const declaration const noChangeMe = [1,2,4] noChangeMe = [2, 3] // Uncaught TypeError: Assignment to constant variable noChangeMe[100] = 100 // everything is OK
let和const声明的变量不能再重复声明。 虽然var可以无限次重复声明,但是并不适用于这两个新的声明方式。
let a = 1 let a = 2 // Identifier 'a' has already been declared
不要用window.xxx去调用let与const声明的变量 ES6规定,let、const、class声明的全局变量,不属于顶层对象的属性。
使用反引号”`”
使用``将字符串包起来,可以解决下面的问题:
字符串不能换行,如果换行只能使用+号
字符串中的引号如果和最外层相同,需要进行转义
字符串中插入变量,需要用+号 以前这样的写法:
var name = 'world' var str = "小明说:/"hello, " + name + "/"" // 小明说:"hello, world"
现在可以方便的写作:
var name = 'world' str str = `小明说:"hello, ${name}"`
总的来说,有三个好处:
不怕字符串中出现的引号;
不怕换行,反引号包起来的字符串可以随便换行;
使用${}将变量或表达式包起来直接放在字符串中,不用写很多+
新闻热点
疑难解答
图片精选