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 相关文章推荐
jquery中文乱码的多种解决方法
Jun 21 Javascript
JS替换字符串中字符即替换全部而不是第一个
Jun 04 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
微信小程序 SocketIO 实例讲解
Oct 13 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
js遮罩效果制作弹出注册界面效果
Jan 25 Javascript
jQuery实现简单的手风琴效果
Apr 17 jQuery
详解Eslint 配置及规则说明
Sep 10 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
微信小程序自定义组件components(代码详解)
Oct 21 Javascript
js实现百度登录窗口拖拽效果
Mar 19 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
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
js 遍历对象的属性的代码
2011/12/29 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
python复制与引用用法分析
2015/04/08 Python
python3 shelve模块的详解
2017/07/08 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
python 连续不等式语法糖实例
2020/04/15 Python
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
理货员的岗位职责
2013/11/23 职场文书
总经理岗位职责范本
2014/02/02 职场文书
英语求职信范文
2014/05/23 职场文书
疾病防治方案
2014/05/31 职场文书
自我管理的活动方案
2014/08/25 职场文书
实习协议书
2015/01/27 职场文书
小学安全教育主题班会
2015/08/12 职场文书