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浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
遍历jquery对象的代码分享
Nov 02 Javascript
JS实现同时搜索百度和必应的方法
Jan 27 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
手机端转换rem适应
Apr 01 Javascript
React + webpack 环境配置的方法步骤
Sep 07 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
Aug 04 Javascript
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 Javascript
基于JavaScript实现随机点名器
Feb 25 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 闭包特性在实际应用中的问题
2009/10/30 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
javascript 日期常用的方法
2009/11/11 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python isinstance函数介绍
2015/04/14 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
python对excel文档去重及求和的实例
2018/04/18 Python
python字典的遍历3种方法详解
2019/08/10 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python之生成多层json结构的实现
2020/02/27 Python
python 元组和列表的区别
2020/12/30 Python
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
校园开放日新闻稿
2015/07/17 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA
CSS的calc函数用法小结
2022/06/25 HTML / CSS