深入理解javascript原型和闭包(12)——简介【作用域】
来源:互联网 发布:阿里云服务器上搭建svn 编辑:程序博客网 时间:2024/06/06 00:06
原文地址:http://www.cnblogs.com/wangfupeng1988/p/3991151.html
提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”。所谓“块”,就是大括号“{}”中间的语句。例如if语句:
再比如for语句:
所以,我们在编写代码的时候,不要在“块”里面声明变量,要在代码的一开始就声明好了。以避免发生歧义。如:
其实,你光知道“javascript没有块级作用域”是完全不够的,你需要知道的是——javascript除了全局作用域之外,只有函数可以创建的作用域。
所以,我们在声明变量时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。除了这两个地方,其他地方都不要出现变量声明。而且建议用“单var”形式。
jQuery就是一个很好的示例:
下面继续说作用域。作用域是一个很抽象的概念,类似于一个“地盘”
如上图,全局代码和fn、bar两个函数都会形成一个作用域。而且,作用域有上下级的关系,上下级关系的确定就看函数是在哪个作用域下创建的。例如,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。
作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。例如以上代码中,三个作用域下都声明了“a”这个变量,但是他们不会有冲突。各自的作用域下,用各自的“a”。
说到这里,咱们又可以拿出jquery源码来讲讲了。
jQuery源码的最外层是一个自动执行的匿名函数:
为什么要这样做呢?
原因就是在jQuery源码中,声明了大量的变量,这些变量将通过一个函数被限制在一个独立的作用域中,而不会与全局作用域或者其他函数作用域的同名变量产生冲突。
全世界的开发者都在用jQuery,如果不这样做,很可能导致jQuery源码中的变量与外部javascript代码中的变量重名,从而产生冲突。
作用域这块只是很不好解释,咱们就小步快跑,一步一步慢慢展示给大家。
下一节将把作用域和执行上下文环境结合起来说一说。
可见,要理解闭包,不是一两句话能说清楚的。。。
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(12)——简介【作用域】(闭包)
- 深入理解javascript原型和闭包系列 系深入理解javascript原型和闭包(17)——补充:上下文环境和作用域的关系
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】
- 深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系
- 深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系
- 深入理解javascript原型和闭包(16)——补充:上下文环境和作用域的关系
- 深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系
- CAS单点登录技术原理
- Android开发笔记(一百三十二)矢量图形与矢量动画
- (6)Java 读写 hdfs文件或者目录
- Git 取消追踪某个文件
- SEAndroid策略分析
- 深入理解javascript原型和闭包(12)——简介【作用域】
- uva 11093 just finish IT
- OrangePi Zero在Armbian Ubuntu上安装Lubuntu-Desktop图形化桌面环境
- java.lang.NoClassDefFoundError: com.android.tools.fd.runtime.AppInfo
- 距用户最近之触角,感知2016大数据应用变迁
- RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)
- java学习
- Kafka 0.10 KafkaConsumer流程简述
- Python实现的用于从布局文件的id生成成员变量声明和findViewById语句的Android开发小工具