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 相关文章推荐
jQuery.getScript加载同域JS的代码
Feb 13 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
Oct 26 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
bootstrap daterangepicker汉化以及扩展功能
Jun 15 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 Javascript
vue组件详解之使用slot分发内容
Apr 09 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
vue.js 实现输入框动态添加功能
Jun 25 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
vue实现滑动超出指定距离回顶部功能
Jul 31 Javascript
JavaScript this在函数中的指向及实例详解
Oct 14 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
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
Laravel定时任务的每秒执行代码
2019/10/22 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
高一英语教学反思
2014/01/22 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
金陵十三钗观后感
2015/06/04 职场文书
学校安全管理制度
2015/08/06 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server