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 滚轮事件使用说明
Mar 07 Javascript
取得窗口大小 兼容所有浏览器的js代码
Aug 09 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
Feb 05 Javascript
jquery实现动态菜单的实例代码
Nov 28 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
JavaScript知识点整理
Dec 09 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
用node和express连接mysql实现登录注册的实现代码
Jul 05 Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 Javascript
vue实现下拉加载其实没那么复杂
Aug 13 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
vue+ts下对axios的封装实现
Feb 18 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
PHP读取MySQL数据代码
2008/06/05 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
php控制文件下载速度的方法
2015/03/24 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
jquery选择器使用详解
2014/04/08 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python实现的归并排序算法示例
2017/11/21 Python
python查询mysql,返回json的实例
2018/03/26 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
基于Python函数和变量名解析
2019/07/19 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
标准单位租车协议书
2014/09/23 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python