首页 > JavaScript > ES6基础
2018
06-04

ES6基础

刚开始用vue或者react,很多时候我们都会把ES6这个大兄弟加入我们的技术栈中。但是ES6那么多那么多特性,我们真的需要全部都掌握吗?秉着二八原则,掌握好常用的、有用的这个可以让我们的开发快速起飞。

接下来我们就聊聊ES6那些可爱的新特性吧。

1.变量声明const和let

在ES6之前,我们都是用var关键字声明变量。无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部)。这就是函数变量提升  例如:

  function aa() {    
      if(bool) {        
          var test = 'hello man'
      } else {        
          console.log(test)
      }
  }

以上的代码实际上是:

function aa() {    var test // 变量提升
    if(bool) {
        test = 'hello man'
    } else {        
        //此处访问test 值为undefined
        console.log(test)
    }    
        //此处访问test 值为undefined
  }

所以不用关心bool是否为true or false。实际上,无论如何test都会被创建声明。

接下来ES6主角登场:
我们通常用letconst来声明,let表示变量const表示常量letconst都是块级作用域。怎么理解这个块级作用域?

  • 在一个函数内部

  • 在一个代码块内部

说白了 {}大括号内的代码块即为let 和 const的作用域。

看以下代码:

function aa() {    
    if(bool) {       
           let test = 'hello man'
    } else {        
           //test 在此处访问不到
        console.log(test)
    }
  }

let的作用域是在它所在当前代码块,但不会被提升到当前函数的最顶部。

再来说说const
const 声明的变量都会被认为是常量,意思就是它的值被设置完成后就不能再修改了。

 const name = 'lux'
 name = 'joe' //再次赋值此时会报错

还有,如果const的是一个对象,对象所包含的值是可以被修改的。抽象一点儿说,就是对象所指向的地址没有变就行。

 const student = { name: 'cc' }    // 没毛病
 student.name = 'yy'
 // 如果这样子就会报错了
 student  = { name: 'yy' }

说一道面试题

var funcs = []    
for (var i = 0; i < 10; i++) {
        funcs.push(function() { console.log(i) })
    }
    funcs.forEach(function(func) {
        func()、
})

这样的面试题是大家常见,很多同学一看就知道输出 10 十次
但是如果我们想依次输出0到9呢?
有两种解决方法。直接看一下代码。

// ES5告诉我们可以利用闭包解决这个问题
var funcs = []   
for (var i = 0; i < 10; i++) {
    funcs.push(
        (function(value) {            
              return function() {                
                  console.log(value)
            }
        })(i)
    )
}
funcs.forEach(function(func) {
    func()
})
// 再来看看es6怎么处理的
const funcs = []   
for (let i = 0; i < 10; i++) {
        funcs.push(function() {            
            console.log(i)
        })
}
funcs.forEach(func => func())

达到相同的效果,es6简洁的解决方案是不是更让你心动!!!

2.模板字符串

es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点。

第一个用途,基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定。

//ES5 
    var name = 'lux'
    console.log('hello' + name)    //es6
    const name = 'lux'
    console.log(`hello ${name}`) //hello lux

第二个用途,在ES5时我们通过反斜杠(\)来做多行字符串或者字符串一行行拼接。ES6反引号(``)直接搞定。

// ES5
    var msg = "Hi \
    man!
    "
    // ES6
    const template = `<div>
        <span>hello world</span>
    </div>`

对于字符串ES6当然也提供了很多厉害也很有意思的方法

本文》有 0 条评论

留下一个回复