zoukankan      html  css  js  c++  java
  • ECMAScript 6 一些有意思的特性

    主要参考了下面两篇博文,对ES6的新特性做一些笔记,加深印象

    *号函数 迭代函数生成器

    我能想到的生成器使用场景有两点,一个是类似类静态变量,一个是类似toggle的切换场景,还有就是异步阻塞程序。

    function *myGenerator() {
        console.log('step1');
        yield 1;
        console.log('step2');
        yield 2;
        console.log('step3');
        return 3; 
    }
    let g  = myGenerator();
    while(true) {
        let curr = g.next();
        if (g.done) {
            console.log(g.value);
            break;
        } else {
            console.log(g.value);
        }
    }
    

    箭头函数

    箭头函数不绑定 this 和 arguments. 通常可以作为匿名函数的简写。这个特殊的特性可以在一些场景提供简洁的代码,同时也会在某些场景带来问题。this 一般是指向当前函数体,
    // arrow function
    let a = {
    word: 'hello',
    say: function(){
    setTimeout(() => {
    console.log(this.word);
    }, 0);
    }
    }
    let b = {
    word: 'world',
    say: function() {
    setTimeout(function() {
    console.log(this.word);
    }, 0);
    }
    }
    a.say(); // hello
    b.say(); // undefined.

    变量声明 let, const VS var

    const 比较简单,不多表
    let 的作用范围在 {} 结构体中,比如for,if,object。 而 var 作用范围在函数体中

    for (var i = 0; i < 3; i++) {
        (function(i) {
            setTimeout(function () {
                console.log(`var: ${i}`);
            }, i * 1000);
        })(i);
    }
    console.log(`after for var: ${i}`);
    for (let x=0; x<3; x++) {
        setTimeout(function () {
            console.log(`let: ${x}`)
        }, x * 1000);
    }
    // console.log(`after var var: ${x}`); // error
    

    模板字符串

    对于经常在前端拼接html与js变量的我来说,无疑是一个福音。而且语法跟php几乎没有区别

    `反引号之间的变量${some_var}会被替换赋值`
    

    函数默认值,解构,展开

    支持像其他语言一样使用函数默认值,跟 || 说再见。
    解构 是指 类似php的 list 语法,或者python的tuple语法。注意数组和对象的区别: [v1,v2] = ['value2', value2]; {name, value} = {name:'xx', value:'yy'}
    展开运算符,用于数组和对象的拼接,还有就是箭头函数的默认传参(类似python中的 *args, **kwargs),数组参数调用(func.apply(null, arr)):

    //数组
    const color = ['red', 'yellow']
    const colorful = [...color, 'green', 'pink']
    console.log(colorful) //[red, yellow, green, pink]
    //对象
    const alp = { fist: 'a', second: 'b'}
    const alphabets = { ...alp, third: 'c' }
    console.log(alphabets) //{ "fist": "a", "second": "b", "third": "c"
    

    Promises

    异步程序的同步写法。本质是把 ok_callback(resolve) 和 err_callback (reject) 封装了一下。然后同过then 调用 resolve 方法,catch 调用 reject 方法。

  • 相关阅读:
    mysql性能调优
    java面试大全
    JVM调优总结
    大数据行业跳槽面试前你需要做什么
    什么是分布式锁?实现分布式锁的方式
    如何保障mysql和redis之间的数据一致性?
    数据倾斜的原因和解决方案
    hive优化
    c# 系统换行符
    12种增强CSS技能并加快开发速度的资源
  • 原文地址:https://www.cnblogs.com/dapianzi/p/8998554.html
Copyright © 2011-2022 走看看