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 事件处理、鼠标拖动效果实现方法详解
May 11 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
JS二维数组的定义说明
Mar 03 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
JavaScript ParseFloat()方法
Dec 18 Javascript
JavaScript中Window对象的属性及事件
Dec 25 Javascript
浅谈javascript的call()、apply()、bind()的用法
Feb 21 Javascript
jQuery 3.0中存在问题及解决办法
Jul 15 Javascript
Vue中mintui的field实现blur和focus事件的方法
Aug 25 Javascript
微信小程序功能之全屏滚动效果的实现代码
Nov 22 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
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php计算一个文件大小的方法
2015/03/30 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
jQuery搜索同辈元素方法
2015/02/10 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
详解Python中time()方法的使用的教程
2015/05/22 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python实现的矩阵类实例
2017/08/22 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
keras中的History对象用法
2020/06/19 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
出纳担保书范文
2014/04/02 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
先进个人评语大全
2015/01/04 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python