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 相关文章推荐
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
JS实现文字掉落效果的方法
May 06 Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
微信 jssdk 签名错误invalid signature的解决方法
Jan 14 Javascript
微信小程序收货地址API兼容低版本解决方法
May 18 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 Javascript
vue中data里面的数据相互使用方式
Jun 05 Vue.js
让你的网站可编辑的实现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
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
php获取随机数组列表的方法
2014/11/13 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
python的re模块应用实例
2014/09/26 Python
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python实现下载文件的三种方法
2017/02/09 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
运动会广播稿400字
2014/01/25 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
大学生就业策划书范文
2014/04/04 职场文书
起诉意见书范文
2015/05/19 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS