在看ES6的时候看到这段代码,对这段代码不太理解,关于作用域的知识.
相关代码
{
function fooc() { return 1 }
{
function fooc() { return 3 }
}
console.log(fooc())
}
console.log(fooc())
//输出
1
3
{
function fooc() { return 1 }
{
function fooc() { return 3 }
}
console.log(fooc())
}
console.log(fooc())
//输出
1
3
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
你是在看ES6的块级作用域吧,单独一对花括号会生成块级作用域,函数提升是提升到当前作用域最顶部
=================以上是使用手机看到问题的简单作答=======================
使用电脑测试了下结果
是不是有点诡异?
哈哈哈,我也觉得有点诡异, 最后一行的调用竟然没有报错。
然后我翻了这篇文章: ECMAScript 6 入门
里面说到了ES6的块级作用域和函数声明的情况,不得不在称赞一下阮一峰老师。
从文章里可以看出,这个的最终结果跟规范以及不同浏览器的实现是息息相关的。
如果你使用babel处理你这段代码,
另外在node环境中,使用非严格模式也是俩个1,使用严格模式会获取一个报错,如下图。