JavaScript中有var 和 没有 var 的区别

var web = $("#qianduan");

web.click(function(){

alert("哈哈哈");

});

我们在创建一个变量的时候,一般都这样去写:

var abc = 123;

同时当我们不写 var的时候也是可以创建变量的,JS高级程序中是这样写的:

在JS里的全局环境就是一个对象,这个对象也是JS运行的根,对浏览器中的JS,这个对象就是window对象。对全局JS语句来说,window对象就相当于当前作用域。

当我们写下:

var MyJs=‘Start‘;

就是定义了window作用域的一个变量MyJs,当我们这样写:

MyJs=‘Start‘;

就是定义了window作用域的一个属性MyJs。

从上面看,window作用域的一个变量MyJs与window作用域的一个属性MyJs几乎等价,对于全局的js语句来说加var与不加没什么区别,但在函数体内的语句加与不加就有区别了。

<script language="javascript" type="text/javascript">
    var MyLike = ‘C#‘;
    YouLike = ‘C++‘;
    alert(‘我喜欢:‘ + MyLike + " 你喜欢:" + YouLike);
    //输出:我喜欢:C# 你喜欢:C++
    ChangeLike();
    function ChangeLike() {

        alert(MyLike + ‘是我喜欢 ‘ + YouLike + ‘是你喜欢‘); //undefined是我喜欢 C++是你喜欢
        var MyLike = ‘JS‘;
        YouLike = ‘JAVA‘;
        alert(MyLike + ‘是我喜欢 ‘ + YouLike + ‘是你喜欢‘)//JS是我喜欢 JAVA是你喜欢
    }
    alert(MyLike + ‘是我喜欢 ‘ + YouLike + ‘是你喜欢‘)//C#是我喜欢 JAVA是你喜欢
</script>

从上面我们可以看出有var 修饰的在函数内外表现出两个东西,没有var修饰的只表现出一个东西,它的值函数内外都可以改变。上面有个undefined大家应该会觉得很奇怪,为什么不是C#。上面说过,在JS全局语句中有var 的就是一个变量,没有的就是一个属性。变量是有作用域的,代码进去下面的函数中,就相当于在当前作用域中创建了一个子作用域。JS引擎首先会把自定义函数创建为作用域上的变量函数,对所有的var 定义的变量,预编译的时候都会定义为undefined,JS遇到变量和函数时会首先在当前作用域找,没找到再往上层找,而var MyLike = ‘JS‘;说明已经存在,初始值定义为undefined,var MyLike = ‘JS‘赋值在输出的后面,所以为undefined。

昨天晚上听广播,说到了这个没有加var的方式。

它创建的是window下的一个属性,而且是可以被delete的,而var声明的变量只能被垃圾回收机制回收,不能被delete,这就是它和var声明变量的区别。

这样一听,感觉很有道理,于是马上去试了delete。

var ccc=22;

delete ccc;

console.log(ccc);

接着试一下不加var的

sss = 33;

console.log(sss);

delete sss;

console.log("delete后“+sss);

时间: 2024-10-28 20:40:58

JavaScript中有var 和 没有 var 的区别的相关文章

【转载】在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别

原文链接:http://www.2cto.com/kf/201204/128406.html[侵删] Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local var

JavaScript中声明是否有var的区别

本文来论述JavaScript中变量声明有var和没有var的区别,关于JavaScript中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是: (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECM

javascript声明对象时 带var和不带var的区别

Javascript声明变量时 var aaa = 111; 和 aaa = 111; 两种方式一样吗? 废话少说,先上代码. var aaa = 11; function test4(){ var aaa = 22; } test4(); console.log(aaa); 结果是什么呢? 11 这个好理解, 函数内的var aaa声明是内部变量,这时结果是第一个aaa的值. 变动一下如下: var abc = 11; function test4(){ abc = 22; } test4()

在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别,== 和 ===的区别

1. 在Javascript中 声明时用"var"与不用"var"的区别 Javascript声明变量时 var a = 111; 和 a = 111; 两种方式一样吗? var a = 11;function test4(){    var a = 22; } test4(); console.log(a); 结果是什么呢? 11 这个好理解, 函数内的var a声明是内部变量,这时结果是第一个a的值. 变动一下如下: var abc = 11;function 

在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别

Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable):如果是在全局域中声明,则为全局变量. 而 num = 1: 事实上是对属性赋值操作.首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc...)中解析 num: 如果在任何

【转】Javascript全局变量var与不var的区别

相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名: 1 <script> 2 var a = 1; 3 b = 2; 4 window.c = 3; 5 </script> 对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值. var与不var有两个区别: 1 v

JavaScript中变量声明有var和没var的区别

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ ... })(): 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区

JavaScript中var、let、const区别?

简单来说是: let是修复了var的作用域的一些bug,变的更加好用.let是更好的var.var的作用域是函数作用域由var定义的变量,它作用域在一个函数体内,而不是我们其他语言理解的大括号{ }内.而let是块级别(大括号括起来的内容) const声明的变量只可以在声明时赋值,不可随意修改,这是最大的特点. 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象: 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升: 使用const声明的是常量,在后面出现的

var a=[]; 和 var a=new Array(); 的区别,为什么前者效率高

因为 JSON格式的语法是引擎直接解释的.而new Array 则需要调用Array的构造器.还有就是1.当你需要将一个数字转化为字符串时可以这样定义:var s=""+1; 这样的转化最快.2.当你定义一个对象类型时:var o={}; 而已 var o=new Object();道理是同样,new Object()需要调用Object的构造器.3.在js中执行字符串替换时,或查找字符串,需要进行循环时,可以考虑使用正则,速度更快.4.尽可能的少定义.使用全局变量var a=[];

写规范的javascript脚本代码 之单var

在函数顶部使用单var语句是比较有用的一种形式,其好处在于: 提供了一个单一的地方去寻找功能所需要的所有局部变量 防止变量在定义之前使用的逻辑错误 帮助你记住声明的全局变量,因此较少了全局变量//zxx:此处我自己是有点晕乎的- 少代码(类型啊传值啊单线完成) 单var形式长得就像下面这个样子: ? 1 2 3 4 5 6 var a=0,       b=3,      c=a+b,     myobject = {},        i,        j; 您可以使用一个var语句声明多个