es6函数提升特性简单总结

2018-01-11  本文已影响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规定,浏览器的实现可以不遵守上面的规定,允许有自己的行为方式。

例子

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')};
}

上一篇 下一篇

猜你喜欢

热点阅读