es6函数提升特性简单总结

例子

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。