`

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关键字

    此外,现代JavaScript推荐使用`let`和`const`关键字来声明变量和常量,这两种声明方式提供了块级作用域,可以有效避免很多由`var`声明导致的问题。 例如,使用`let`可以限制变量的作用域仅在声明它的代码块内: ```...

    javascript定义变量时加var与不加var的区别

    在大型项目中,不加`var`声明变量可能导致全局变量的污染,使得不同部分的代码可能无意间共享和修改相同的变量,造成难以调试的问题。因此,良好的编程实践是始终使用`var`、`let`或`const`来明确声明变量,以保持...

    JavaScript的声明变量 var let const的区别

    主要是总结了声明变量的特点 熟悉掌握对后续的学习很有帮助,欢迎大家共同探讨共同学习。

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

    在JavaScript编程语言中,`var` 是用于声明变量的关键字。了解`var`的作用和它在使用时的差异,对于编写高效且无错误的代码至关重要。这篇文章将深入探讨`var`关键字的用法以及在声明变量时是否使用`var`的区别。 ...

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

    本文将详细探讨使用var定义与不使用var定义变量之间的区别,尤其是在JavaScript的函数作用域和全局作用域中。 首先,让我们讨论函数作用域。在JavaScript中,当使用var关键字在函数内部定义一个变量时,该变量会...

    javascript定义变量时带var与不带var的区别分析

    `开启),如果尝试不使用`var`关键字声明变量,JavaScript会抛出错误,防止隐式全局变量的产生,从而避免潜在的bug。 3. 变量提升(Hoisting): JavaScript中的变量声明会被提升到其所在作用域的顶部,不论声明的...

    JavaScript声明全局变量访问方法

    当你在函数外部或任何代码块之外使用`var`关键字声明变量时,该变量就会成为全局变量。 ```javascript var globalVar = "我是全局变量"; ``` - **不使用关键字声明**:如果你在函数或代码块外部直接赋值而未使用...

    JavaScript变量声明详解

    首先,JavaScript提供了三种声明变量的方式:`var`、`let` 和 `const`。在讨论这些声明方式之前,我们先区分全局变量和局部变量。全局变量在整个程序中都是可见的,而局部变量只在其所在的函数或块级作用域内有效。...

    JavaScript变量

    - **显式声明**:通过`var`关键字显式声明变量。 ```javascript var test = "hi"; // 声明并初始化 var test1, test2; // 声明但未初始化 ``` - **无需类型声明**:由于JavaScript是一种动态类型的语言,因此...

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

    在全局作用域中,使用`var`和不使用`var`声明变量的差异并不明显,但它们在细节上有所不同。通过`Object.getOwnPropertyDescriptor()`方法可以查看变量在`window`对象上的属性特性: ```javascript var globalVar =...

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

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

    Javascript var变量隐式声明方法

    然而,如果在声明变量时省略var,JavaScript解释器仍然会处理这种变量声明,但其作用域和行为将与显式使用var声明的变量不同。 在JavaScript中,如果未使用var声明变量而直接赋值,这个变量就会成为全局变量,即在...

    javascript 的var、let、const的区别.pdf

    这三种方式都可以用来声明变量,但它们之间有一些关键的区别。 var 声明 在 JavaScript 中,使用 var 关键字声明的变量具有函数作用域。换言之,var 声明的变量只能在当前函数内访问。如果我们在函数外部访问 var ...

    Javascript全局变量var与不var的区别深入解析

    JavaScript中的全局变量是编程中一个基础且...在实践中,为了避免不必要的全局变量和潜在的冲突,通常推荐使用`let`或`const`(在ES6及以上版本)来声明变量,因为它们提供了块级作用域,有助于减少全局变量的使用。

    var与Javascript变量隐式声明

    在早期的JavaScript版本中,我们可以使用`var`关键字来声明变量,但这个声明过程并不严格要求必须使用`var`关键字。如果未使用`var`声明变量而直接赋值,JavaScript会将该变量隐式地声明成全局变量,这种情况被称作...

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

    在ES6及以后的版本中,还有另外两种声明变量的方式:`let` 和 `const`,它们各有不同的用途。 - 变量名是程序员自定义的标识符,用来区分不同的变量。变量名需要遵循一定的命名规则。 - `=` 是赋值运算符,用于将...

Global site tag (gtag.js) - Google Analytics