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 相关文章推荐
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
基于jQuery试卷自动排版系统
Jul 18 Javascript
用jquery统计子菜单的条数示例代码
Oct 18 Javascript
使用javascript获取页面名称
Dec 23 Javascript
javascript实现动态表头及表列的展现方法
Jul 14 Javascript
angularjs学习笔记之简单介绍
Sep 26 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
May 04 Javascript
vue组件间通信解析
Mar 01 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
May 29 Javascript
vue常用高阶函数及综合实例
Feb 25 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
PHP加密解密类实例代码
2016/07/20 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
python监控nginx端口和进程状态
2019/09/06 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
Python 日期与时间转换的方法
2020/08/01 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
广告传媒专业应届生求职信
2014/03/01 职场文书
健康家庭事迹材料
2014/05/02 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL