`

JavaScript声明变量加var和不加var的区别

阅读更多

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

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

var 语句用于声明变量。

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

var carName;

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

为变量复制,操作如下:

carName = "Volvo";
var test = function(){
 a = 'aa';
}
test();
alert(window.a);//弹出'aa'

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

var carName = "Volvo";

 语法

var varname = value;

 参数值

varname	必须。指定变量名。
                变量名可以包含字母,数字,下划线和美元符号。
                变量名必须以字母开头
                变量名也可以以$和_开头(但一般不这么用)
                变量名是大小写敏感的(y和Y是不同的变量)
                保留字(如JavaScript关键字)不能作为变量名使用
value	         可选。指定变量的值。

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

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

 

先来看一段代码

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

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

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

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

var a = 'aa';
delete window.a; // false 
a = 'aa';
delete window.a; // true

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

var test = function(){
 a = 'aa';
}
test();
alert(window.a);//弹出'aa'

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

var test = function(){
 a = 'aa';
}
test();
alert(a);//弹出'aa'

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

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

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

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

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

var test = function(){
 a = 'aa';
}
test();
alert(this.a);//弹出'aa'

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

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

var var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
}

 结果为:undefined

var var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
}

 结果为:1

var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
}

 结果为:undefined

var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
}

 结果为:1

 

 

分享到:
评论

相关推荐

    JavaScript声明变量时为什么要加var关键字

    var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它,不过还是建议大家加var

    javascript中加var和不加var的区别 你真的懂吗

    var 语句用于声明变量,本文给大家介绍javascript 中加’var‘和不加'var'的区别,涉及到javascript var相关知识,对javascript var相关知识感兴趣的朋友一起学习吧

    JavaScript中变量声明有var和没var的区别示例介绍

    在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区别。 var fff = 2; window.ffa ...

    JavaScript程序设计课件:变量.pptx

    var是一个js关键字,用来声明变量。使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员来管 空格,分隔变量名和关键词的,必须有 变量名,起一个名字来代替后面的值 =,在js里面等号是赋值的...

    JavaScript变量声明var,let.const及区别浅析

    var声明变量的作用域限制在其声明位置的上下文中 var x = 0; // x是全局变量,并且赋值为0。 console.log(typeof z); // undefined,因为z还不存在。 function a() { // 当a被调用时, var y = 2; // y被声明成...

    html文件 声明变量部分代码

    声明变量 <script type="text/JavaScript"> var x; //语文成绩 var y; //数学成绩 var z; //总分 x=prompt("语文成绩?","100"); y=prompt("数学成绩?","100"); z=x+y; document.write("你的总成绩为"+...

    var与Javascript变量隐式声明

    在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。

    浅谈JavaScript中定义变量时有无var声明的区别

    主要介绍了JavaScript中定义变量时有无var声明的区别分析以及示例分享,需要的朋友可以参考下

    浅析JavaScript声明变量

    使用var关键词声明变量的作用域是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量。 定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指通过var...

    关于JavaScript中var声明变量作用域的推断

    一、迷思!由一段代码引发的疑惑 请看如下代码: 代码如下: for... 如果JavaScript中用var声明的变量可视为局部变量,那么能访问到这个变量的作用域就是这个变量的局部作用域。如上例,在console.log行处,依然有j、k

    JavaScript的变量声明与声明提前用法实例分析

    本文实例讲述了JavaScript的变量声明与声明提前用法。...声明变量与未声明变量之间的区别为: 1. 声明变量的作用范围限定在其执行的上下文环境中。未声明的变量总是全局的。 function x() { y = 1; // Throws a Refe

    Javascript var变量隐式声明方法

    在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。

    在Javascript中 声明时用"var"与不用"var"的区别

    Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的

    JavaScript var声明变量背后的原理示例解析

    只要是写过点JS代码,很简单一个var 就完事了。那对于JS编译器背后它又发生了什么呢?... 那是因为:js编译器在执行这个y函数的时候,会把把它body里面的声明变量提前到最前面进行声明。比如:var x=2; 编译

    JavaScript声明变量名的语法规则

    一、语法规则  1.变量必须使用字母、下划线(_)或者美元符($)开始。  2....变量虽然可以不声明,直接使用,但不规范,会涉及变量名提升等问题。 以上所述就是本文的全部内容了,希望大家能够喜欢。

Global site tag (gtag.js) - Google Analytics