请问如何理解这一段JS代码?

在看ES6的时候看到这段代码,对这段代码不太理解,关于作用域的知识.

相关代码
{
    function fooc() { return 1 }
    {
        function fooc() { return 3 }
    }
    console.log(fooc())
}
console.log(fooc())

//输出
1
3
为什么不都是3呢,或者为什么不都是1呢?
阅读 1.5k
1 个回答

你是在看ES6的块级作用域吧,单独一对花括号会生成块级作用域,函数提升是提升到当前作用域最顶部

=================以上是使用手机看到问题的简单作答=======================

使用电脑测试了下结果

clipboard.png

是不是有点诡异?

哈哈哈,我也觉得有点诡异, 最后一行的调用竟然没有报错。

然后我翻了这篇文章: ECMAScript 6 入门

里面说到了ES6的块级作用域和函数声明的情况,不得不在称赞一下阮一峰老师。

从文章里可以看出,这个的最终结果跟规范以及不同浏览器的实现是息息相关的。

如果你使用babel处理你这段代码,

clipboard.png

另外在node环境中,使用非严格模式也是俩个1,使用严格模式会获取一个报错,如下图。

clipboard.png

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题