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 相关文章推荐
页面中iframe相互传值传参
Dec 13 Javascript
javascript 定义新对象方法
Feb 20 Javascript
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
基于jQuery的图片左右无缝滚动插件
May 23 Javascript
jquery load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
jQuery 仿百度输入标签插件附效果图
Jul 04 Javascript
JavaScript中的普通函数与构造函数比较
Apr 07 Javascript
javascript类型系统——undefined和null全面了解
Jul 13 Javascript
elementUI中Table表格问题的解决方法
Dec 04 Javascript
javascript头像上传代码实例
Sep 28 Javascript
详解 javascript对象创建模式
Oct 30 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 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
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
解读! Python在人工智能中的作用
2017/11/14 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python函数的作用域及关键字详解
2019/08/20 Python
Python tkinter常用操作代码实例
2020/01/03 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
财务副总经理工作职责
2013/11/25 职场文书
写给保洁员表扬信
2014/01/08 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
机关节能减排实施方案
2014/03/17 职场文书
调研汇报材料范文
2014/08/17 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
党支部意见范文
2015/06/02 职场文书
导游词之西递宏村
2019/12/10 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫