美文网首页
ES6 &&ES2016 and ES2017(四)

ES6 &&ES2016 and ES2017(四)

作者: 我是一个粉刷酱 | 来源:发表于2018-08-08 12:01 被阅读0次

    1. From IIFEs to blocks

    在ES5中,如果你想要定义一个块级作用域的变量,你需要使用IIFE(Immediately-Invoked Function Expression) 模式:

    (function(){
    var tmp=... ...
    }());
    console.log(tmp); //ReferenceError
    

    在ES6中你可以更加简单的使用let或者const以及一个代码块来进行定义:

    {
    let tmp=... ...
    }
    console.log(tmp);//ReferenceError
    

    2. From concatenating strings to template literals

    从串联字符串到模板字符串 ??应该是这个意思吧

    单行字符串

    在ES5中,你可以使用连接字符串将各个值拼接到一块:

    var x=1;var y=2
    console.log('('+x+','+y+')')
    

    在ES6中你可以使用模板字符串来实现字符串的拼接:

    let x=1;let y=2;
    console.log(`(${x},${y})`)
    
    多行字符串
    var HTML5_SKELETON =
        '<!doctype html>\n' +
        '<html>\n' +
        '<head>\n' +
        '    <meta charset="UTF-8">\n' +
        '    <title></title>\n' +
        '</head>\n' +
        '<body>\n' +
        '</body>\n' +
        '</html>\n';
    

    我们可以看到原生ES5是十分麻烦的,而ES6中的模板字符串同样使用于该种情况:

    let HTML5_SKELETON = `
        <!doctype html>
        <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
        </body>
        </html>`;
    

    3.From function expressions to arrow functions

    函数表达式到箭头函数,在ES5中当你使用方法是要注意this的作用域。下边的示例中使用了self来使this的作用域到其需要的位置:

    function oldfun{
        var self = this;
        var button = document.getElementById('myButton');
        button.addEventListener('click',function(){
            console.log('click');
            self.handleClick();
      })
    }
    oldfun.prototype.handleClick=function(){
      ... ...
    }
    

    在ES6中,就可以使用不影响this作用域的箭头函数:

    function es6fun{
         let button = document.getElementById('myButton');
         button.addEventListener('click', () => {
            console.log('click');
            this.handleClick(); 
        });
    }
    

    箭头函数对于仅返回表达式结果的短回调非常有用,在ES5中,使用起来较为冗长:

    var arr = [1, 2, 3];
    var squares = arr.map(function (x) { return x * x });
    

    而ES6中,箭头函数则更加整洁:

    let arr = [1, 2, 3];
    let squares = arr.map(x => x * x);
    

    ps:箭头函数没有自己的this, 它的this是继承而来; 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象, 定义它的时候,可能环境是window; 箭头函数可以方便地让我们在 setTimeout ,setInterval中方便的使用this


    作为一个90后,既然早早地抱起了保温杯,泡上了枸杞水,那就认真地过好每一天吧。


    相关文章

      网友评论

          本文标题:ES6 &&ES2016 and ES2017(四)

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