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 跳转代码集合
Dec 03 Javascript
jquery分页插件jpaginate在IE中不兼容问题
Apr 22 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
Sep 05 Javascript
js实现常用排序算法
Aug 09 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
Mar 06 Javascript
vue2.0+vue-dplayer实现hls播放的示例
Mar 02 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
关于Vue组件库开发详析
Jul 01 Javascript
Vue实现一个无限加载列表功能
Nov 13 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
VSCode使用之Vue工程配置eslint
Apr 30 Javascript
Promise静态四兄弟实现示例详解
Jul 07 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
无限级别菜单的实现
2006/10/09 PHP
PHP 递归效率分析
2009/11/24 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
js 文件引入实现代码
2010/04/23 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
认识less和webstrom的less配置方法
2017/08/02 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python实现远程控制电脑
2019/05/23 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
医疗纠纷协议书
2014/04/16 职场文书
供货协议书
2014/04/22 职场文书
快递员岗位职责
2014/09/12 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
教师党员自我评价范文
2015/03/04 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers