JS全局变量和局部变量最新解析


Posted in Javascript onJune 24, 2016

就是这种盲目无原理依据的研究测试弄晕了我, 有必要这么做吗? 其实理解了原理就没必要搞这么多一个一个的试, 然后得出规律, ECMAScript规则都已经定义好了.

var的规则是: 使用var声明变量就是内部变量, 否则就是先调用全局变量, 不管多少层函数.

this的规则是: method函数里的this永远指向自身, 普通函数的this永远指向DOMWindow.

// GodDamnTest1
function Foo() { 
var a = 123; // 局部变量, 所有子函数的全局变量
this.a = 456; // 对象属性
(function() { 
alert(a); // 123, 全局
alert(this.a); // undefined, 普通函数, this指向DOMWindow 
})(); 
} 
var f = new Foo(); 
// GodDamnTest2
function Foo() { 
var a = 123; 
this.a = 456; 
(function(a) { // 局部声明
alert(a); // 456, 被函数局部声明的a覆盖了全局 
})(this.a); 
} 
var f = new Foo(); 
// GodDamnTest3
function Foo() { 
var a = 123; 
this.a = 456; 
(function() { 
alert(a); // 123, 全局
alert(this.a); // undefined, DOMWindow 
this.b = 789; // window.b = 789
})(); 
(function() { 
alert(this.b); // 789, window.b
})(); 
} 
var f = new Foo(); 
(function() { 
alert(this.b); // 789, window.b
})(); 

// GodDamnTest4
function Foo() { 
(function() { 
this.b = 789; // window.b = 789
})(); 
(function() { 
alert(this.b); // 789, window.b
var b = 0; 
alert(b); // 0, 这样的测试也写出来了!
})(); 
} 
var f = new Foo(); 
(function() { 
alert(this.b); // 789, window.b
alert(b); // 789, window.b
})();

令人意外的是,最后一个 alert(b),结果仍然是 789。 // no damn surprise at all!

// GodDamnTest5
function Foo() { 
(function() { 
this.b = 789; // window.b = 789
})(); 
(function() { 
alert(this.b); // 789, window.b
alert(b); // undefined, 全局
var b = 0; 
alert(b); // 0, 还有这种测试!
})(); 
} 
var f = new Foo(); 
(function() { 
alert(this.b); // 789, window.b
alert(b); // 789, window.b
})();

PS:JS删除局部变量的方法

alert('value:'+str+'\ttype:'+typeof(str)) //声明变量前,引用
var str="dd";
alert('value:'+str+'\ttype:'+typeof(str)) //声明并赋值变量后,引用
str=undefined;




 //删除局部变量
alert('value:'+str+'\ttype:'+typeof(str)) //取消变量后,引用,和第一个相同

以上所述是小编给大家介绍的JS全局变量和局部变量最新解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
零基础学JavaScript最新动画教程+iso光盘下载
Jan 22 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
可自己添加html的伪弹出框实现代码
Sep 08 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
给before和after伪元素设置js效果的方法
Dec 04 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
jquery实现搜索框功能实例详解
Jul 23 jQuery
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 #Javascript
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
Jun 24 #Javascript
jquery表单插件Autotab使用方法详解
Jun 24 #Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
Jun 24 #Javascript
jQuery下拉框的简单应用
Jun 24 #Javascript
浅谈json取值(对象和数组)
Jun 24 #Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 #Javascript
You might like
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
python ansible服务及剧本编写
2017/12/29 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Python绘制动态水球图过程详解
2020/06/03 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
护理自荐信
2013/10/22 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
地震慰问信
2015/02/14 职场文书
百万英镑观后感
2015/06/09 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android