Javascript的变量作用域居然可以跨越多个函数!
今天,编写一个JavaScript的代码,是这样子的:
function a(){
...
for(i=0;i<abc.length;i++){
...
b();
...
}
...
}
function b(){
...
for(i=0;i<def.length;i++){
...
}
...
}
这样2个JavaScript函数。然而,a函数仅仅执行了一次循环,就跳出了for循环。它本应该执行多次循环。
我查了一整天代码,刚才终于让我发现了错误的原因。
原来,Javascript的变量,生命周期管理有问题。函数a和b的局部变量i, JavaScript认为它们是同一个变量。
这样,在函数b中执行完循环后,函数a中的i值已经超过了条件,所以每一次都只执行一次a的for循环。
我把b函数中的i改成j之后,就正常了!
这种变量生命周期的管理,确实是有悖常理的。 我使用的是IE7,不知道这是不是JavaScript的规范?还是IE7自身的实现有问题?
看来,我们必须在JavaScript编码中,注意尽量避免使用同名的变量,以免发生变量名冲突这样的问题。这种问题极其隐蔽,很难发现!
转载于:https://www.cnblogs.com/armlinux/archive/2006/08/22/2391082.html
Javascript的变量作用域居然可以跨越多个函数!相关推荐
- 深入理解JavaScript的变量作用域
在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数 ...
- JavaScript的变量作用域深入理解(转)
在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整 ...
- 深入理解JavaScript的变量作用域(转)
在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数 ...
- 深入理解JavaScript的变量作用域(转载Rain Man之作)
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...
- javaScript中变量作用域
作用域是程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript采用词法作用域(lexical scoping),也就是静态作用域. 转载 ...
- 【C++ grammar】重载、内联、变量作用域、带默认参数的函数
目录 1.变量的作用域 1. 变量的作用域分类 2. Unary Scope Resolution (一元作用域解析运算符) 2.重载函数 3.带有默认参数值的函数 4.重载函数 VS 带有默认参数值 ...
- 【JavaScript 笔记】— 函数高级(变量作用域、解构赋值、方法、高阶函数、闭包、箭头函数、generator)
JavaScript个人笔记 变量作用域 变量提升 全局对象 windows 命名空间 局部作用域 常量 解构赋值 使用场景 方法 apply 装饰器 高阶函数(Array) map reduce m ...
- javascript变量作用域一点总结
前言:javascript里变量作用域是个经常让人头痛抓狂的问题,下面通过10++个题目,对经常遇到又容易出错的情况进行了简单总结,代码样例很短很简单 题目一 var name = 'casper'; ...
- HTML5学习笔记(十四):变量作用域
在JavaScript中,用var申明的变量实际上是有作用域的. 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量: function foo() {var x = ...
最新文章
- Android中NFC编程
- 更改eclipse tomcat jvm heap
- 数据库保护(数据库备份)Sql Server2012 图形界面操作
- GIT项目管理工具(part6)--放弃工作区文件修改及从仓库区恢复文件
- IPC 共享内存和 消息队列(发送、接收、移除)以及键值的生成
- java 线程局部存储,转载boost::thread简要分析(3):线程局部存储及其它
- JVM监控及诊断工具命令行篇之jstack
- c4d语言在哪个文件夹,c4d的插件目录是哪个文件夹(c4d插件怎么安装)
- import oracle utility_oracle executing oracle import utility,please wait终极解决方案
- 移动硬盘安装win10
- 区块链的底层技术:P2P网络原理与应用详解
- 预处理工艺采用水处理过滤器的作用说明
- 多益网络2022届校招提前批全面启动【免筛推荐码QEAQU】
- python发邮件附件_python 发送带附件的邮件
- 在vue页面监听中如何修改子元素的样式
- 黑马程序员 JAVA相关基础知识
- 奥特曼系列ol如何进老服务器,《奥特曼系列OL》新手攻略
- zip压缩包密码破解
- c语言,通过计算行最简的方式来求行列式的值
- 计算机动画ico图标,动画图标制作工具(GraphicsGale)