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 相关文章推荐
Javascript 中介者模式实例
Dec 16 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
javascript分页代码(当前页码居中)
Sep 20 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
node.js [superAgent] 请求使用示例
Mar 13 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
微信小程序 wx:for的使用实例详解
Apr 27 Javascript
vue中如何实现pdf文件预览的方法
Jul 12 Javascript
vue+vant实现商品列表批量倒计时功能
Jan 13 Javascript
javscript 数组扁平化的实现
Feb 03 Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
浅谈PHP进程管理
2019/03/08 PHP
Js 中debug方式
2010/02/07 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
python动态加载变量示例分享
2014/02/17 Python
python列出目录下指定文件与子目录的方法
2015/07/03 Python
Python对List中的元素排序的方法
2018/04/01 Python
python 显示数组全部元素的方法
2018/04/19 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
Python实现聚类K-means算法详解
2022/07/15 Python