码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript中有var 和 没有 var 的区别

时间:2017-08-24 01:06:45      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:垃圾   like   str   art   img   编译   round   等价   预编译   

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);

技术分享

 

JavaScript中有var 和 没有 var 的区别

标签:垃圾   like   str   art   img   编译   round   等价   预编译   

原文地址:http://www.cnblogs.com/agansj/p/7420937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!