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 网页黑白效果实现代码(兼容IE/FF等)
Apr 23 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
Aug 09 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
JQuery 图片滚动轮播示例代码
Mar 24 Javascript
javascript的switch用法注意事项分析
Feb 02 Javascript
jquery手风琴特效插件
Feb 04 Javascript
JS+CSS3模拟溢出滚动效果
Aug 12 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 Javascript
React四级菜单的实现
Apr 08 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三维数组去重(示例代码)
2013/11/26 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
python开发之thread线程基础实例入门
2015/11/11 Python
python操作mysql数据库
2017/03/05 Python
Python中turtle作图示例
2017/11/15 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
团队队名口号大全
2014/06/06 职场文书
奥林匹克的口号
2014/06/13 职场文书
怎样写离婚协议书
2015/01/26 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
Linux中文件的基本属性介绍
2022/06/01 Servers
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS