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 相关文章推荐
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
Oct 11 Javascript
使用js解决由border属性引起的div宽度问题
Nov 26 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
jquery实现图片放大点击切换
Jun 06 jQuery
详解vue父子组件间传值(props)
Jun 29 Javascript
Angular父子组件通过服务传参的示例方法
Oct 31 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
Aug 04 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
深入PHP magic quotes的详解
2013/06/17 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
DOM相关内容速查手册
2007/02/07 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
Python中的yield浅析
2014/06/16 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
详解python之简单主机批量管理工具
2017/01/27 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
python求绝对值的三种方法小结
2019/12/04 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
大整数数相乘的问题
2012/07/22 面试题
测试工程师程序员求职信范文
2014/02/20 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
爱国演讲稿400字
2014/05/07 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
python本地文件服务器实例教程
2021/05/02 Python