写在文章前面
这篇文章翻译自ES6 tips and tricks to make your code cleaner, shorter, and easier to read!. 文章就代码整洁方面对es6进行了总结。如有错误欢迎指出。
template literals 模板字符串
模板字符串使字符串的使用变得比以前更简单了,他们以反引号开始(`),并且能过使用${变量}
来插入变量。我们来比较一下下面两行代码。
var fName = 'Peter', sName = 'Smith', age = 43, job= 'photographer';var a = 'Hi, I/'m ' + fName + ' ' + sName + ', I/'m ' + age + ' and work as a ' + job + '.';var b = `Hi, I'm ${ fName } ${ sName }, I'm ${ age } and work as a ${ job }.`;
一切都变得很美好了是不是,代码更易读了是不是?你可以在大括号内放入任何东西:变量,等式,或者函数的调用。 我将会在后面的整个文章的示例中使用这些方式。
块级作用域语法
JavaScript是使用函数作用域的,这就是为什么我们是为什么我们越来越频繁的使用匿名的立即执行函数表达式(iife)来实现整个JavaScript文件的封装。我们这么做是为了把所有的变量隔离在文件内从而避免变量冲突。
现在我们有了块级作用域和两个崭新的块级作用域的变量声明
let declaration let命令
这个命令和var很相似但却又有着显著的不同。因为他是有块级作用域的,声明一个相同名字的新变量可以完全不影响外部的变量。
var a = 'car' ;{ let a = 5; console.log(a) // 5}console.log(a) // car
因为他是被限制在块级作用域的,他解决了那道非常经典的面试题:“下面这个代码的输出是什么,如何修改让他运行之后成为你想的那个样子?”
for (var i = 1; i < 5; i++){ setTimeout(() => { console.log(i); }, 1000);}
这个例子中,输出是“5 5 5 5 5”因为变量i在每次迭代中都会改变。
如果我们把var变为let,一切都变了。 现在,每次循环都会创建一个全新的块级作用域吧i限制在当前的循环,他可以理解为这样:
{let i = 1; setTimeout(() => { console.log(i) }, 1000)} {let i = 2; setTimeout(() => { console.log(i) }, 1000)} {let i = 3; setTimeout(() => { console.log(i) }, 1000)} {let i = 4; setTimeout(() => { console.log(i) }, 1000)} {let i = 5; setTimeout(() => { console.log(i) }, 1000)}
var 和 let的另外一个区别是 let 不会像 var一样被变量提升
{ console.log(a); // undefined console.log(b); // ReferenceError var a = 'car'; let b = 5;}
因为他有更为局限的作用域,以及更能被预测的行为,因此一些人甚至认为你应该使用let来代替var, 除非当你真的特别需要变量提升或者更宽松的作用域范围,你再使用var
新闻热点
疑难解答
图片精选