美文网首页
es6函数提升特性简单总结

es6函数提升特性简单总结

作者: 古_道_西_风_瘦_马 | 来源:发表于2018-01-11 15:23 被阅读0次

    例子

    var sayTruth =function(){console.log(2)}
    function  sayTruth(){console.log('1')};
    sayTruth();
    
    环境 es5 es5严格模式 es6 node es6 node严格模式 es6浏览器 es6浏览器严格模式 babel
    结果 2 2 2 2 2 2 2

    例子

    sayTruth();
    
    function sayTruth(){console.log('1')};
    
    环境 es5 es5严格模式 es6 node es6 node严格模式 es6浏览器 es6浏览器严格模式 babel
    结果 1 1 1 1 1 1 1

    从前面两个例子可以简单看出 es6对函数提升恩es5保持一致

    例子

    if(1){
        function sayTruth(){console.log('1')};
    }
    else{
        function sayTruth(){console.log('2')};
    }
    sayTruth();
    

    执行结果

    环境 es5 es5严格模式 es6 node es6 node严格模式 es6浏览器 es6浏览器严格模式 babel
    结果 2 not defined 1 not defined 1 not defined not defined
    原因 变量提升 严格模式 严格模式 严格模式 严格模式

    ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。若改变了块级作用域内声明的函数的处理规则,显然会对老代码产生很大影响。为了减轻因此产生的不兼容问题,ES6规定,浏览器的实现可以不遵守上面的规定,允许有自己的行为方式。

    • 允许在块级作用域内声明函数。
    • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
    • 同时,函数声明还会提升到所在的块级作用域的头部。

    例子

    sayTruth();
    if(1){
        function sayTruth(){console.log('1')};
    }
    else{
        function sayTruth(){console.log('2')};
    }
    
    
    环境 es5 es5严格模式 es6 node es6 node严格模式 es6浏览器 es6浏览器严格模式 babel
    结果 2 not defined not a function not defined not a function not defined not defined
    原因 变量提升 严格模式 严格模式 严格模式 严格模式

    对于es6 等同于

    var sayTruth ;
    sayTruth();
    if(1){
        function sayTruth(){console.log('1')};
    }
    else{
        function sayTruth(){console.log('2')};
    }
    
    

    相关文章

      网友评论

          本文标题:es6函数提升特性简单总结

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