【JavaScript】变量冲突是可以通过编译的

在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相隔甚远的情况下,你很难发现,你写的代码,与你复制下来的代码是否存在冲突。

时间: 2024-10-10 07:24:31

【JavaScript】变量冲突是可以通过编译的的相关文章

JavaScript简介——添加到(X)HTMl文档及Javascript变量

1.JavaScript是一种专门设计用来给网页增加交互性的编程语言,其代码通常嵌入在网页中. JavaScript是一种解释型语言,不需要预先编译就可以执行 JavaScript是一种专门用来对网页进行编程的脚本语言. 2.JavaScript的作用: (1)全面控制HTML网页中的所有元素 (2)可以在HTMl网页中加入动态文本 (3)响应用户在使用网页时产生的事件 (4)用于校验用户输入的数据 (5)检测访问者的浏览器 (6)用于创建cookies 3.JavaScript技术体系包含的内

Javascript变量与方法

变量命名 变量必须以字母开头 变量也能以 $ 和 _ 符号开头(私有变量命名常用"_"开头) 变量名称对大小写敏感 变量声明 通过var显式声明(var user),若不声明,则为全局变量,即为window对象的属性,可通过window.user获取,其值为undefined.也可在一条语句中声明多个变量 var a=1, b=2, c=3; 变量可以重复声明 Javascript中,作用域是由函数划分的,而不是由块划分(如while, if, for).不过代码总要有一个上下文对象,

转:javascript变量的作用域

原文请访问http://www.cnblogs.com/rubylouvre/archive/2009/08/21/1551270.html, 我也只是为了做个记录 javascript变量的作用域 <script type="text/javascript">  var a=100;  var b=true;  function test(){      alert(a);      alert(b);      b=false;      alert(b);     

jQ禁止右键点击、隐藏搜索文本框文字、在新窗口中打开链接、检测浏览器、预加载图片、页面样式切换、所有列等高、动态控制页面字体大小、获得鼠标指针的X值Y值、验证元素是否为空、替换元素、延迟加载、验证元素是否存在于Jquery集合中、使DIV可点击、克隆对象、使元素居中、计算元素个数、使用Google主机上的Jquery类库、禁用Jquery效果、解决Jquery类库与其他Javascript类库冲突

1. 禁止右键点击 代码如下: $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 2. 隐藏搜索文本框文字 代码如下: $(document).ready(function() { $("input.text1").val("Enter your search text here"); textFill($

[从jQuery看JavaScript]-变量与作用域链

jQuery片段: [javascript] view plaincopy var // Will speed up references to window, and allows munging its name. window = this, // Will speed up references to undefined, and allows munging its name. undefined, // Map over jQuery in case of overwrite _jQ

说说javascript变量类型和变量类型检测

javascript是一种弱类型语言,它的典型例子就是即变量在使用的时候可以给它赋值任何类型.那么先来看下javascript都有那些变量类型已经它们的使用方法吧. 先来看看javascript都有那些类型吧: string --- 字符串number --- 数值boolean --- 布尔值undefined --- 未申明的变量 或 申明并未赋值null --- 空object  --- 对象function  --- 函数 这里比较有争议的是 function 类型到底要不要归属到变量类

由浅入深JavaScript——变量和原始类型

JavaScript变量 JavaScript变量标识符标识符 var + 变量名称来定义变量.变量名称以字母,下划线_,美元$符号开头,余下字符可以是字母,数字,下划线,美元符号.eg: var  name = 'hello';     var  a1 = 'hello';    var  _test = 'hello';    var  $test = 'hello';    以上变量名称均为正确.    var  1a = 'hello'; //数字开头错误.    JavaScript允

JavaScript 变量声明提升

JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.switch语句.for...in语句等),不存在变量声明提升 三.函数声明会提升,但是函数表达式的函数体就不会提升 1 fun(); // hello 2 function fun(){ 3 console.log("hello"); 4 } 5 // -------------- 6 //

回归基础: JavaScript 变量提升

from me: javascript的变量声明具有hoisting机制,它是JavaScript一个基础的知识点,也是一个比较容易犯错的点,平时在开发中,大大小小的项目都会遇到. 它是JavaScript引擎在执行的时候,把所有变量的声明都提升到当前作用域的最前面. 当然了,函数声明也是可以被提升的.然后,函数表达式却没有提升. 原文:Back to Basics: JavaScript Hoisting 译文:回归基础: JavaScript 变量提升 变量声明是所有的编程语言中最基础部分之