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 写的简单进度条控件
Jan 22 Javascript
JS array 数组详解
Mar 22 Javascript
为调试JavaScript添加输出窗口的代码
Feb 07 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
Node.js中使用计时器定时执行函数详解
Aug 15 Javascript
简介AngularJS的视图功能应用
Jun 17 Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
Dec 12 Javascript
bootstrap实现动态进度条效果
Mar 08 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
jquery实现掷骰子小游戏
Oct 24 jQuery
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
javascript 读取图片文件的大小
2009/06/25 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python 元组操作总结
2019/09/18 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
国培远程培训感言
2014/03/08 职场文书
《风筝》教学反思
2014/04/10 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS