Javascript作用域和闭包
来源:互联网 发布:微博登录绑定域名 编辑:程序博客网 时间:2024/06/04 19:51
一、作用域
想知道作用域,我们得先了解什么是执行上下文。
首先,通过一段小案例看看。
<script type="text/javascript"> console.log(a); var a = 100; fn('小明'); function fn(name){ age = 20; console.log(name,age); var age; }
看看运行之后的效果图。
为什么?其实是这样,网页加载js文件的时候是从头开始的,当执行console打印语句时,找不到a,所以先赋值给undefined,然后全局找变量a包括函数体fn,将a提取出来,fn也提取出来。都提取出来之后,fn已经预加载了,所以fn(“小明”),就能够打印正常了。这就是执行上下文。
Javascript中的作用域的原则
无块级作用域
有函数作用域和全局作用域
无块级作用域
比如JAVA中,
if(name=="小明"){ int a = 100;}System.out.pritln(a);//出错!XXXX 无法打印出a的值
而javascript中则可以
if(name=="小明"){ var a = 100;}console.log(a) //成功打印
这就是javascript和java的区别。
函数作用域和全局作用域
比如这段代码
var a = 100;function fn(){ var a = 50; console.log(a); //输出的是50}console.log(a); //输出的是100
函数作用域的意思就是某一个变量的只限定在特定函数体内,比如fn()这个函数体内。
全局作用域指的是,定义一个变量a,谁都能够访问到同名的变量a,最大的缺点就是,谁都能任意覆盖a的值。比如,在其它空白区域重新定义变量a,var a = 1000; 那么a就被覆盖成了1000。变量a数据容易被污染。
二、闭包
闭包的概念
一个函数能够访问其它函数内部的变量。举个例子:
function outer(){ var a = 100; return function(){ return a; } } var func = new outer(); func();//100
从上述代码可知,外部有一个函数outer(),outer()里有一个匿名函数,而匿名函数中却没有变量a,可是最后却能够成功打印变量a的值,所以这就是闭包。
阅读全文
0 0
- JavaScript作用域链和闭包
- JavaScript 作用域和闭包
- javascript 作用域链和闭包
- 细说JavaScript作用域和闭包
- JavaScript作用域和闭包
- 详解javascript作用域和闭包
- javascript作用域和闭包
- javascript作用域和闭包
- javascript作用域和闭包
- JavaScript作用域和闭包
- JavaScript 变量作用域和闭包
- javascript作用域和闭包,this
- Javascript作用域和闭包
- Javascript 的词法作用域、调用对象和闭包
- 浅谈JavaScript的闭包和作用域链
- JavaScript中的作用域链和闭包
- !!JavaScript中的作用域链和闭包 整理
- 精通Javascript 之 作用域和闭包
- 【正一专栏】侯耀华的“徒弟”到底是安娜金还是“俺那紧”
- 更多你所不知道的 Linux 命令
- C# winform 获取非客户区域大小
- 认识UIScrollView
- 从尾到头打印链表
- Javascript作用域和闭包
- 如何使用Nginx搭建WCF集群!
- 数据中心 【建立联系,融入自己的知识体系中】
- 日期比较
- 远程使用x-manager中Xstart工具报缺少xterm包错误
- Java 的三大特性
- 思科设备DHCP服务配置
- 慢慢适配Xcode8.0+
- JSP简介和会话技术