• javascript中加var和不加var的区别


    Javascript是遵循ECMAScript标准下的一个产物,自然ECMAScript的标准其要遵循。

    先来看下var关键字的定义和用法

    var 语句用于声明变量。

    JavaScript 变量的创建也叫作"声明"一变量:

    复制代码代码如下:

    var carName;

    变量声明后,变量为空 (没有值)。

    为变量复制,操作如下:

    复制代码代码如下:

    carName = "Volvo";

    声明变量时,你同样可以为变量赋值:

    复制代码代码如下:

    var carName = "Volvo";

    语法

    复制代码代码如下:

    var varname = value;

    参数值

    参数描述
    varname 必须。指定变量名。

    变量名可以包含字母,数字,下划线和美元符号。

    • 变量名必须以字母开头
    • 变量名也可以以$和_开头(但一般不这么用)
    • 变量名是大小写敏感的(y和Y是不同的变量)
    • 保留字(如JavaScript关键字)不能作为变量名使用
    value 可选。指定变量的值。

    注意: 如果变量声明未指定值,其默认值为 undefined

    大家都看了很多文章,都说避免隐式声明全局变量,就是说声明变量前必须加'var',那加了'var'和不加'var'到底有啥区别呢?

     先来看一段代码

    1
    2
    3
    var a = 'aa';
    alert(a); //弹出 'aa'
    alert(window.a)//弹出'aa'

    明白了吧,你声明一个全局变量其实是给'window'对象增加了一个属性,下面一段代码有相同效果

    1
    2
    3
    a = 'aa';
    alert(a); //弹出 'aa'
    alert(window.a)//弹出'aa'

    那"var a = 'aa' " 和 "a = 'aa' " 都是全局变量,有啥区别了? 看下面两段段代码

    1
    2
    3
    4
    var a = 'aa';
    delete window.a; // false
    a = 'aa';
    delete window.a; // true

    都是为'window'对象增加了属性,一个可以删除,一个不能删除。但是加上'var'就可以作用域相关了,不加'var'始终都是在为'window'对象动态添加属性,以下代码为证

    1
    2
    3
    4
    5
    var test = function(){
     a = 'aa';
    }
    test();
    alert(window.a);//弹出'aa'

     由于window对象是全局对象,因此默认可以不加,下面这段同样效果

    1
    2
    3
    4
    5
    var test = function(){
     a = 'aa';
    }
    test();
    alert(a);//弹出'aa'

    说到这,认真思考的同学现在必然有个疑问, 为啥隐式声明的全局变量可以删除,显式声明的全局变量就无法删除?

    原因是"delete 不可以删除那些可配置性为false的属性" ,某些内置对象的属性是不可配置的,比如通过变量声明或者函数声明创建的全局对象的属性,以下代码为证

    1
    2
    3
    4
    5
    delete Object.prototype; // false 不可删除,该属性是不可配置的
    var a = 'aa';
    delete window.a;//false 不可删除,该属性是不可配置的
    function test(){};
    delete window.test;//false 不可删除,该属性是不可配置的

    那这样不就明白了,通过'var'声明的全局变量,其实际上是为'window'对象增加了一个不可配置的属性, 而不加'var'声明的全局变量,其实际上是为'window'对象增加了一个可以配置的属性。

    注意了,以上使用window的地方,window都可以用this代替,如:

    1
    2
    3
    4
    5
    var test = function(){
     a = 'aa';
    }
    test();
    alert(this.a);//弹出'aa'

    至于原因,请查看鄙人之前写的文章 'this,this,再次讨论javascript中的this,超全面'

    下面拉出javascript中的var关键字,给大家单独讲解。

    我们知道定义变量的时候,我们需要用到Var关键字,使用Var关键字时,我们需要注意他的使用方法:
    下面几个列子,充分说明了Var在使用和不使用、全局变量和局部变量定义时,有不同的执行结果。

    1
    2
    3
    4
    5
    var var01 = 1;
    function funtest() {
     document.write(var01);
     var var01 = 0;
    }

    结果为:undefined

    1
    2
    3
    4
    5
    var var01 = 1;
    function funtest() {
     document.write(var01);
     var01 = 0;
    }

    结果为:1

    1
    2
    3
    4
    5
    var01 = 1;
    function funtest() {
     document.write(var01);
     var var01 = 0;
    }

    结果为:undefined

    1
    2
    3
    4
    5
    var01 = 1;
    function funtest() {
     document.write(var01);
     var01 = 0;
    }

    结果为:1

    看到这里对javascript中的var你了解多少,相信大家通过本文学习多多少少都会有点收获的吧。欲了解更多关于javascript var相关知识请持续关注本站,谢谢!

  • 相关阅读:
    Java进阶之并发初探
    Java进阶之HashMap剖析
    Java进阶之反射
    Linux常用命令
    海量数据处理算法与面试题
    一些刷题时总结的重要知识点
    一些Java刷题时的小知识点
    九章算法知识点与题目总结(不定时更新...)
    c++设计模式之状态模式
    c++设计模式之抽象工厂模式
  • 原文地址:https://www.cnblogs.com/zhus/p/6306475.html
Copyright © 2020-2023  润新知