频道栏目
读书频道 > web开发 > Javascript > JavaScript编程精解(原书第2版)
3.3 嵌套作用域
2015-12-04 14:26:42     我来说两句
收藏   我要投稿
《高级程序设计(第3版)》是 超级畅销书的**新版。ECMAScript 5 和HTML5 在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为 增添了很多适应未来发展的新特性。本书这一版除增加5 章  立即去当当网订购

JavaScript不仅能区分全局变量和局部变量,还可以在函数中创建其他函数,并产生不同程度的局部作用域。

举例来说,下面这个没有什么实际用途的函数中包含了两个函数:

 

 

由于flat和mountain函数都定义在函数landscape中,因此这两个函数都可以访问变量result。但是两个函数无法访问对方的count变量,因为变量定义不在其可访问范围内。而landscape函数外部环境无法访问任何landscape内部定义的变量。

简而言之,任何局部作用域都可以访问到包含它的局部作用域的变量。函数内部变量的可见性取决于函数在代码当中的位置。在包含了一个函数定义的代码块中,这个函数可以访问到代码块中的所有变量,即函数上层的代码块中的变量和函数内部的变量。这种控制变量可见性的方法称为词法作用域(lexical scoping)。

对于有其他程序设计语言开发经验的开发者来说,他们可能希望使用大括号为任意代码块创建一个局部环境。但在JavaScript中,只有函数能够创建新的作用域。你可以编写一个独立的代码块。


 

但代码块中的变量something其实引用的是代码块外部的那个同名变量。实际上,虽然JavaScript允许使用大括号创建代码块,但其作用仅限于在if语句或循环语句中组织代码体而已。

如果你觉得这种设计不那么合理,请相信你不是一个人。JavaScript下个版本将会引入let关键字,其作用与var相同,都是创建变量,只不过变量作用域是块局部作用域而非函数局部作用域。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.2 参数和作用域
下一篇:3.4 函数值
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站