Javascript var变量隐式声明方法


Posted in Javascript onOctober 19, 2009

诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
除此之外,今天通过同事介绍,了解到这种“隐式声明”中的别外一个问题。
当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量!
比如:

window. y = "hello"; 
function func(){ 
y = "OH, NO!!!"; 
} 
func(); 
alert(window.y); //#=> display "OH, NO!!!"

当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。(这种bug也挺讨厌的,尤其是封装的比较复杂的代码)
比如:
var x = "window.x"; 
function a() { 
var x = "a's x"; 
var b = function() { 
var c = function() { 
//no var! 
x = "c's x:"; 
}; 
alert("before c run,the b.x:" + x); 
c(); 
alert("after c run, the b.x:" + x); 
}; 
alert("a.x is:" + x); 
b(); 
alert("after b function runed, the a.x is:" + x); 
}; 
alert("before a run, window.x:" + x); 
a(); 
alert("after a run, window.x:" + x);

这里面有以下几层:window, func a, func b, func c一直作层级嵌套。window->a->b->c
window和a中,都有定义变量x,b中未定义该变量,在c中‘隐式'声明了一个x,该x最终修改了a变量的值。
牢记,在JavaScript中,声明变量,一定前面要加var .
Javascript 相关文章推荐
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
jQuery 改变CSS样式基础代码
Feb 11 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
Jun 20 Javascript
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
Angular4开发解决跨域问题详解
Aug 28 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
纯JS实现五子棋游戏
May 28 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
让你的网站可编辑的实现js代码
Oct 19 #Javascript
document.onreadystatechange事件的用法分析
Oct 17 #Javascript
将jQuery应用于login页面的问题及解决
Oct 17 #Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 #Javascript
JavaScript 基于原型的对象(创建、调用)
Oct 16 #Javascript
JavaScript 定义function的三种方式小结
Oct 16 #Javascript
JavaScript 函数式编程的原理
Oct 16 #Javascript
You might like
一个程序下载的管理程序(一)
2006/10/09 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
php中JSON的使用与转换
2015/01/14 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
动态加载iframe
2006/06/16 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Python 互换字典的键值对实例
2019/02/12 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
洗煤厂厂长岗位职责
2014/01/03 职场文书
善意的谎言事例
2014/02/15 职场文书
网络营销策划方案
2014/06/04 职场文书
教师师德师风整改措施
2014/10/24 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
雷锋的故事观后感
2015/06/10 职场文书
保护环境的宣传语
2015/07/13 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书