Javascript的变量作用域居然可以跨越多个函数!
2006-08-22 23:22
483 查看
今天,编写一个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编码中,注意尽量避免使用同名的变量,以免发生变量名冲突这样的问题。这种问题极其隐蔽,很难发现!
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编码中,注意尽量避免使用同名的变量,以免发生变量名冲突这样的问题。这种问题极其隐蔽,很难发现!
相关文章推荐
- Javascript的变量作用域居然可以跨越多个函数!
- JavaScript-4.2函数,变量作用域---ShinePans
- C#居然可以用中文做变量名和函数名
- JavaScript的变量及函数(变量提升、嵌套作用域、条件语句、严格模式、IIFE、闭包、模块化、this、原型)
- JavaScript 函数总体概述(函数声明/参数传递/返回值/加载/变量和作用域/变量声明提升/匿名函数/回调函数)
- JavaScript_事件、函数、变量作用域
- javascript中变量没有块级作用域---函数内申明的变量在整个函数中都有效!
- javascript基础(函数与方法的区别,变量作用域,变量和函数的声明提前,函数作用域)(十五)
- javascript和python函数中变量作用域的区别
- JavaScript中的作用域与函数和变量声明的提升
- [JavaScript] 模拟块级作用域、私有变量/函数
- JavaScript 变量作用域、函数作用域、作用域链
- JavaScript 基础(五) 函数 变量和作用域
- JavaScript学习记录day6-函数变量作用域、解构赋值与方法
- javascript基础:函数传递参数的方式、参数数组、变量范围(变量作用域)
- javascript中函数中定义变量的作用域
- javaScript定义函数的三种方式&变量的作用域
- javascript 函数初探 (三)--- javascript 变量的作用域
- javascript中的回调函数中变量作用域
- JavaScript-函数(二)变量作用域与解析赋值