js作用域及var与无var的区别

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

当我们写下:

1

var MyJs='Start';

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

1

MyJs='Start';

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

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

1

2

扫描二维码关注公众号,回复: 3841120 查看本文章

3

4

5

6

7

8

9

10

11

12

13

14

15

<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。

猜你喜欢

转载自blog.csdn.net/qq_34343254/article/details/83547404
今日推荐