美文网首页JavaScript-learner让前端飞程序员
4-JavaScript-学一点es6基础知识

4-JavaScript-学一点es6基础知识

作者: _panda | 来源:发表于2017-08-03 16:11 被阅读9次

es6 学习

let的作用域-块级作用域

var name = 'zach'

while(true){
    var name = 'obama'
    console.log(name)
    break
}
console.log(name)

//let和var的区别在于作用域不同

let name = 'zach'

while(true){
    let name = 'name'
    console.log(name) //obama
    break
}

console.log(name)

//let的另外一个常用的地方在于for循环中

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
var clickBoxs = document.querySelectorAll('.clickBox')
for (var i = 0; i < clickBoxs.length; i++){
    clickBoxs[i].onclick = function(){
        console.log(i)
    }
}

``

另外一个var带来的不合理场景就是用来计数的循环变量泄露为全局变量,看下面的例子:

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
上面代码中,变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。而使用let则不会出现这个问题。

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6
再来看一个更常见的例子,了解下如果不用ES6,而用闭包如何解决这个问题。

var clickBoxs = document.querySelectorAll('.clickBox')
for (var i = 0; i < clickBoxs.length; i++){
    clickBoxs[i].onclick = function(){
        console.log(i)
    }
}
我们本来希望的是点击不同的clickBox,显示不同的i,但事实是无论我们点击哪个clickBox,输出的都是5。下面我们来看下,如何用闭包搞定它。

function iteratorFactory(i){
    var onclick = function(e){
        console.log(i)
    }
    return onclick;
}
var clickBoxs = document.querySelectorAll('.clickBox')
for (var i = 0; i < clickBoxs.length; i++){
    clickBoxs[i].onclick = iteratorFactory(i)
}
const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。

const PI = Math.PI

PI = 23 //Module build failed: SyntaxError: /es6/app.js: "PI" is read-only
当我们尝试去改变用const声明的常量时,浏览器就会报错。
const有一个很好的应用场景,就是当我们引用第三方库的时声明的变量,用const来声明可以避免未来不小心重命名而导致出现bug:

const monent = require('moment')

链接:http://www.jianshu.com/p/ebfeb687eb70

相关文章

  • 4-JavaScript-学一点es6基础知识

    es6 学习 let的作用域-块级作用域 //let和var的区别在于作用域不同 //let的另外一个常用的地方在...

  • React学习总结

    第1章 课程导学 学习前提要有一些js、es6、webpack、npm等基础知识 第2章 React初探 2-1 ...

  • es6基础知识3(迭代)

    title: es6基础知识3(迭代)tags: 迭代categories: 前端 1. 迭代器 es6中新增了迭...

  • es6-selfnote

    ECMAScript6(ES6)基础知识及核心原理 使用Babel编译ES6 一、下载安装Babel环境:需要电脑...

  • ES6 入门简介

    本教程我们学习 ES6 的基础知识,ES6 是 ECMAScript6 的简称,是2015年6月正式发布的 Jav...

  • ES6 入门简介

    本教程我们学习 ES6 的基础知识,ES6 是 ECMAScript6 的简称,是2015年6月正式发布的 Jav...

  • es6基础知识5(defineProperty)

    title: es6基础知识5(defineProperty)date: 2019-06-30 08:58:35t...

  • 代数系统

    前言:本篇博客主要学习代数系统的基础知识 0X00 大纲 大纲如上,为了学习代数系统我们得先学一点基础知识 0X0...

  • 第八周第二天笔记

    ES6之Promise类 1 Promise类基础知识解读 promise类的静态属性方法分类:resolve()...

  • es6基础知识3(函数拓展)

    title: es6基础知识3(函数拓展)tags: 参数默认值 剩余参数 箭头函数 categories: 前端...

网友评论

    本文标题:4-JavaScript-学一点es6基础知识

    本文链接:https://www.haomeiwen.com/subject/lqmplxtx.html