使用var和不使用声明变量的区别

相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名:

<script>
var a = 1;
b = 2;
window.c = 3;
</script>

  

对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值。

var与不var有两个区别:

1 var的全局变量不能被删除,因为delete只能删除对象的可删除的属性,而通过var 定义的全局属性会被标明不可删除。需要说明的是,delete不成功并不会抛错,delete的返回值是true|false。

2 var定义的全局变量会被提升,而不用var定义的全局变量不会被提升。可以看下面程序的执行结果:

<script>
alert(a); // undefined
var a=1;
</script>

  

<script>
alert(a);//error, a undefined
a=1;
</script>
时间: 2024-10-29 05:14:12

使用var和不使用声明变量的区别的相关文章

PHP 闭包获取外部变量和global关键字声明变量的区别

最近在学习workerman的时候比较频繁的接触到回调函数,使用中经常会因为worker的使用方式不同,会用这两种不同的方式去调用外部的worker变量,这里就整理一下PHP闭包获取外部变量和global关键字声明变量的区别. 闭包 闭包是一个常见的概念,我们通常可以将其与回调函数配合使用,可以使代码更加简洁易读. 闭包可以通过拷贝的方式让函数使用父作用域中的变量.如: $global = 'hello'; $bbb = function()use($global){ echo $global.

ES6的let和var声明变量的区别

关于let的描述 let允许你声明一个作用域被限制在块级中的变量.语句或者表达式.与var关键字不同的是,它声明的变量只能是全局或者整个函数块的. 作用域规则 let声明的变量只在其声明的块或子块中可用,这一点,与var相似.二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数,是全域的 . function varTest() { var x = 1; if (true) { var x = 2; // 同样的变量! console.log(x); // 2 } console.lo

OC中用@interface和 @property 方式声明变量的区别

用了@property去定义,一般要在.m文件中用@synthsize去合成相应的setter,getter方法.否则会得到一个警告.当然@synthsize是可选的,但是是Apple推荐的,不用会有什么后果 两种方式有什么区别: 1. 只在@interface中定义变量的话,你所定义的变量只能在当前的类中访问,在其他类中是访问不了的:而用@property声明的变量可以在外部访问. 2.用了@property去声明的变量,可以使用“self.变量名”的方式去读写变量.而用@interface的

【IOS】@interface和 @property 方式声明变量的区别

在IOS编程中,很多人没有理解实例变量与属性的区别,我根据自己的经验,这这里与大家分享下这里面的区别,下面我写一个简单的例子: .h @interface MyController :UIViewController { UILabel *_myLabel;//这里是实例变量声明 } @property (nonatomic, retain) UILabel*myLabel;//这里是你的属性声明 @end .m @implementation MyController @synthesize

【转】 IOS,objective_C中用@interface和 @property 方式声明变量的区别

原文: http://blog.csdn.net/ganlijianstyle/article/details/7924446 1.在  @interface :NSObject{} 的括号中,当然NSObject 是指一个父类,可以是其他的. 形式如下: @interface GCTurnBasedMatchHelper : NSObject {     BOOL gameCenterAvailable;     BOOL userAuthenticated; } 2.另外一种是直接在 @in

js中要声明变量吗?

你好,js语言是弱类型语言,无需申明即可直接使用,默认是作为全局变量使用的.建议:在function里时应使用var 申明变量,这样改变量仅仅只在function的生存周期内存在,不会污染到,全局控件.至于直接在<script>标签内使用的话则申明不声明效果都是一样的. 下面的文章可以帮助你更清楚的了解js变量一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个

关于Javascript中通过var关键字声明变量和function关键字声明函数的笔记

一.概念 1.变量声明 在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值): var a=1,b,c; //关键字显式声明变量a,b,c,并给a赋值console.log(a); //1 //由于b,c未定义变量类型,因此输出"undefined"console.log(b); //undefinedconsole.log(c); //undefined //如果变量未声明,则输出

C# var声明变量解析

C# var声明变量解析: 在C#3.0中提供了一种新的声明变量的方式,这就是var. 通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定的.代码如下: var ss = "abcd"; MessageBox.Show(ss.GetType().ToString()); 上面的代码将显示System.String,从而证明C#编译器已经将ss编译成了String变量了. 而在输出ss后,再输入"."后,会看到将String类型变量的相应方

为什么JavaScript声明变量的时候鼓励加var关键字

在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. [javascript] view plaincopyprint? var x = "XX"; y ="xxx"; var x = "XX"; y ="xxx"; 诸如此类.这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“