JavaSript中变量的作用域闭包的深入理解


Posted in Javascript onMay 12, 2014
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
<script type="text/javascript"> 
/* 
* 1.js中的变量都是公用的. 
2.js中没有静态变量 
3.闭包:函数内部可以调用函数外部的变量;反之,则不行 
*/ var r=10; 
function test1(){ 
var r2="abc"; 
//alert(r) 
} 
//alert(r2);//不能访问的函数内部的r2 
test1(); 
//嵌套的函数中也ok啦 
function test2(num1){ 
function test3(num2,num3){ 
return num2+num3+num1; 
} 
return test3(10,20) 
} 
//alert(test2(30)); 
//---------循环中的闭包------------------------ 
function testfun(){ 
var r=1; 
var arr=[]; 
for(var x=0;x<3;x++){ 
r++; 
arr[x]=function(){ 
return r; 
} 
} 
return arr; 
} 
alert("testfun:"+testfun()); 
var arr2=testfun(); 
alert("arr:"+arr2[0]); 
alert("arr:"+arr2[1]()); 
alert("arr:"+arr2[2]()); 
//==========以上三个弹出框的结果都是4========== 
/*分析原因: 
理解一下在JavaScript中函数是什么? 
函数就是一段可执行的代码块,函数也是可以用一个变量表示,比如函数的第二种定义方式 
var add=new Function("a","return a+10");底层的本质就是这个函数名指向 
了这一段为变量而创建的可执行的代码。 
* 首先当testfun函数执行完毕以后,arr[0],arr[1],arr[]中都是存储了相同的 
可执行代码块function(){ 
return r 
}也就是说上面三个是函数变量而已,要执行它们只需要在变量名称后面加()就ok了 
而且这个时候r的值4 
当执行arr[0]()相当于执行了这个代码块中的代码。 
所以最终的结果return r,当然返回4了。 
*/ 
</script> 
</head> 
<body> 
</body> 
</html>
Javascript 相关文章推荐
JS取request值以及自动执行使用示例
Feb 24 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
js判断鼠标位置是否在某个div中的方法
Feb 26 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
vue2.0父子组件及非父子组件之间的通信方法
Jan 21 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
vue+iview动态渲染表格详解
Mar 19 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
使用vue完成微信公众号网页小记(推荐)
Apr 28 Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 Javascript
JS实现炫酷雪花飘落效果
Aug 19 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 #Javascript
JavaScript中对象属性的添加和删除示例
May 12 #Javascript
构造函数+原型模式构造js自定义对象(最通用)
May 12 #Javascript
Javascript中对象继承的实现小例
May 12 #Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 #Javascript
js图片处理示例代码
May 12 #Javascript
jquery实现的一个简单进度条效果实例
May 12 #Javascript
You might like
几种显示数据的方法的比较
2006/10/09 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
PHP编程函数安全篇
2013/01/08 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
js文字滚动停顿效果代码
2008/06/28 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
chrome原生方法之数组
2011/11/30 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
JS中Location使用详解
2015/05/12 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
flask中过滤器的使用详解
2018/08/01 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
在C#中如何实现多态
2014/07/02 面试题
高中毕业生生活的自我评价
2013/12/08 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
党组织公开承诺书
2014/03/29 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
golang DNS服务器的简单实现操作
2021/04/30 Golang