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小技巧之生成html元素
May 15 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 Javascript
Jquery和Js获得元素标签名称的方法总结
Oct 08 Javascript
详解Vue.js动态绑定class
Dec 20 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
layer.js之回调销毁对话框的例子
Sep 11 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
Oct 22 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中执行cmd命令的方法
2014/10/11 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
python设置环境变量的作用整理
2020/02/17 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
文明礼仪伴我行演讲稿
2014/05/12 职场文书
医院搬迁方案
2014/06/14 职场文书
长江三峡导游词
2015/01/31 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
在职证明格式样本
2015/06/15 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技