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实现倒计时按钮的实现代码
Mar 23 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
Vue制作Todo List网页
Apr 26 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
Vue 列表上下过渡效果的实例代码
Jun 25 Javascript
基于js判断浏览器是否支持webGL
Apr 18 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 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数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
php生成二维码
2015/08/10 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
js post提交调用方法
2014/02/12 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
行政总监岗位职责
2013/12/05 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
开学典礼决心书
2014/03/11 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
教师考察材料范文
2014/06/03 职场文书
幼儿园辞职信
2015/05/13 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书