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的tab切换 js原理
Apr 01 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
JS删除字符串中重复字符方法
Mar 09 Javascript
JavaScript中按位“异或”运算符使用介绍
Mar 14 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
Javascript实现苹果悬浮虚拟按钮
Apr 10 Javascript
react-native使用leanclound消息推送的方法
Aug 06 Javascript
基于 jQuery 实现键盘事件监听控件
Apr 04 jQuery
关于layui的动态图标不显示的解决方法
Sep 04 Javascript
Vue中常用rules校验规则(实例代码)
Nov 14 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 Javascript
JavaScript动态生成表格的示例
Nov 02 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
javascript 用函数实现继承详解
2016/05/28 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
Python实现读取并保存文件的类
2017/05/11 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
python实现批量修改文件名
2020/03/23 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
美国购车网站:TrueCar
2016/10/19 全球购物
德国电子商城:ComputerUniverse
2017/04/21 全球购物
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
三分钟演讲稿范文
2014/04/24 职场文书
学校读书活动总结
2014/06/30 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis
Redis读写分离搭建的完整步骤
2021/09/14 Redis
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers