《理解 ES6》阅读整理:函数(Functions)(七)Block-Level Functions
2016-10-25 20:52
295 查看
块级函数(Block-Level Functions)
在ES3及以前,在块内声明一个函数会报语法错误,但是所有的浏览器都支持块级函数。不幸的是,每个浏览器在支持块级函数方面都有一些细微的不同的行为。所以开发者最好不要在块内声明函数。为了解决浏览器在块内支持声明函数时带来的兼容性问题,在ES5中可以使用strict模式,这样如果开发者试图定义一个块内函数,就会报错:
在ES6中,上面的doSomething函数是一个块级函数,并且可以在同一块内调用:
上面的代码中,doSomething被提升到块顶部,在块外不能被访问到。
决定何时使用块级函数(Deciding When to Use Block-Level Functions)
块级函数与let函数表达式相似,当代码执行出块后,函数的定义就被移除了。两者的区别是块级函数会被提升到块的顶部,而let函数表达式则不会。参见下面的例子:
ES6中也可以在non-strict模式下定义块级函数,但是跟在strict模式下会有不同。块级函数会被提升到整个函数顶部或者全局环境中:
在这个例子中,doSomething函数会被提升到全局作用域中,因此上面两处都会输出function。
在ES3及以前,在块内声明一个函数会报语法错误,但是所有的浏览器都支持块级函数。不幸的是,每个浏览器在支持块级函数方面都有一些细微的不同的行为。所以开发者最好不要在块内声明函数。为了解决浏览器在块内支持声明函数时带来的兼容性问题,在ES5中可以使用strict模式,这样如果开发者试图定义一个块内函数,就会报错:
"use strict"; if (true) { //throws a syntax error in ES5 function soSomething() { //... } }
在ES6中,上面的doSomething函数是一个块级函数,并且可以在同一块内调用:
"use strict"; if (true) { console.log(typeof doSomething); // "function" function doSomething() { //... } doSomething(); } console.log(typeof doSomething); // "undefined"
上面的代码中,doSomething被提升到块顶部,在块外不能被访问到。
决定何时使用块级函数(Deciding When to Use Block-Level Functions)
块级函数与let函数表达式相似,当代码执行出块后,函数的定义就被移除了。两者的区别是块级函数会被提升到块的顶部,而let函数表达式则不会。参见下面的例子:
"use strict"; if (true) { console.log(typeof doSomething); // "error" let doSomething = function() { //... } doSomething(); } console.log(typeof doSomething); // "undefined"
ES6中也可以在non-strict模式下定义块级函数,但是跟在strict模式下会有不同。块级函数会被提升到整个函数顶部或者全局环境中:
if (true) { console.log(typeof doSomething); // "function" let doSomething = function() { //... } doSomething(); } console.log(typeof doSomething); // "function"
在这个例子中,doSomething函数会被提升到全局作用域中,因此上面两处都会输出function。
相关文章推荐
- 《理解 ES6》阅读整理:函数(Functions)(四)Arrow Functions
- 《理解 ES6》阅读整理:函数(Functions)(六)Purpose of Functions
- 《理解 ES6》阅读整理:函数(Functions)(五)Name Property
- 《理解 ES6》阅读整理:函数(Functions)(八)Tail Call Optimization
- 《理解 ES6》阅读整理:块绑定(Block Binding)
- 对于linux下system()函数的深度理解(整理)
- 对于linux下system()函数的深度理解(整理)
- 第十四周上机任务---程序阅读,理解函数
- 对于linux下system()函数的深度理解(整理)
- 深入理解JavaScript系列(15) 函数(Functions)
- 刚刚在看52单片机和GPS通信程序的时候,看到了一个函数,absacc.h,貌似从来没有遇到过,百度了一下,结合自己的理解,整理如下: http://blog.sina.com.cn/s/blog_4
- 深入理解JavaScript系列 ----(15):函数(Functions)
- 深入理解JavaScript系列(15):函数(Functions)
- 对fork()函数的理解 分类: C/C++ 2015-07-29 14:20 4人阅读 评论(0) 收藏
- 深入理解断言assert()函数(待整理)
- 深入理解JavaScript系列(15):函数(Functions)
- 第十二周项目 1 阅读程序(理解函数的默认参数)
- 第十四周 程序阅读,理解虚函数与纯虚函数
- 深入理解JavaScript系列(15):函数(Functions)
- 2013级C++第12周程序阅读项目——理解函数