【JavaScript】变量冲突是可以通过编译的
来源:互联网 发布:附近淘宝店 编辑:程序博客网 时间:2024/06/11 19:34
在JavaScript中,以下的代码是一段合法的程序:
var i=0;var i=1;alert(i);
其运行结果是弹窗输出1,
看上去半点问题没有,但是,在Java,C等一些编程语言中,以下类似的代码就不是一段合法的程序:
int i=0;int i=0;
编译都不能通过编译,何况运行呢?因为变量i被重复定义,而JavaScript中,纵使变量i被重复定义也一样没问题,这就是静态作用域与动态作用域的问题。静态作用域与动态作用域具体是什么,这里就不大段大段地放上一大段《编译原理》里面的概念上来,看着就头晕。
在Javascript中,这样纵使变量i被重复定义也一样没问题,纵使变量冲突也是可以通过编译的,倒底有什么问题呢?
问题是非常大的。导致比如下面的一段程序中的错误非常难以发现:
for(var i=0;i<1;i++){for(var i=0;i<1;i++){}}
这在Java,C等一些编程语言中,会提示变量i被重复定义,因为里面的for中的计算变量i,应该写成j或者其它,但是Javascript不会,你的网页打开之后,不会在浏览器下面显示:,然后你就发现你的所需要的特效打死也无法正常运行。尤其是在现在天下代码一大抄的背景下,在这两个for相隔甚远的情况下,你很难发现,你写的代码,与你复制下来的代码是否存在冲突。
0 0
- 【JavaScript】变量冲突是可以通过编译的
- vc2005和IE冲突 主要是在通过向导添加方法或变量的时候会报脚本错误。
- javascript function传递 参数当参数是 字符串 如何拼接(有些参数是通过变量得到的) 如何拼接
- javascript的内部变量与其它函数的命名冲突
- JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 --==- 附上可以编译的程序
- 原来D2007是可以支持类变量的,嘿嘿
- 初探C++数组的size可以是变量
- 再探C++数组的size可以是变量
- 通过虚函数表 私有成员是可以访问的
- JavaScript中的函数是可以动态改变的
- 在JS中如果函数名与变量名冲突,JS是怎么执行的?
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- java是通过java虚拟机进行编译和运行的。
- Javascript : 变量存放的是引用还是值
- javascript 函数和变量是区分大小写的
- JavaScript的replace方法中参数是变量
- 变量名冲突的解决办法
- VS2008编译C代码时会检查变量定义的位置,可以改为编译为C++代码
- 叉乘计算多边形面积:poj 1654 Area
- ORACLE 获取同期数据的两种方法
- 传球游戏
- SQL_Oracle 表中ID字段的自动递增
- HDOJ 1283 最简单的计算机(水)
- 【JavaScript】变量冲突是可以通过编译的
- jquery实现的整屏切换特效
- 从SD上加载jar并运行
- QTreeWidget实现动态加载本地文件系统
- 一位博士生的返乡笔记:近年情更怯,春节回家看什么
- Android事件处理机制系列-----------Touch事件处理机制
- WEB页面离开时销毁对象
- 口袋衣橱项目开始做
- CF 518E(Arthur and Questions-贪心)