Chinaunix首页 | 论坛 | 博客
  • 博客访问: 879851
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 虚拟化

2012-05-08 15:23:38

javascript中的var关键字,作用很简单。用于声明一个变量。如果不给声明的变量赋值则为undefined.

var test = 'test'; var t;

此时test值为,'test', t 的值为undefinde. 

似乎很简单,并没有什么特殊的地方。只要学过js的,都知道。

那么请看下面这段代码的执行结果。

console.log(test);

var test = 'test';

console.log(test);

这样先输出了undefunde 然后输出了test。很奇怪吧。相信很多朋友会以为会产生错误。

因为我们在输出test时,它还未被定义。结果应该像输出一个未定义的变量那样被抛出错误才对。可是事实却并非如此。

这是为什么呢,原来JS在解析时var 会被预先解析。也就是说,这段代码的实际运行效果是这样的。

var test;

console.log(test);

test = 'test';

console.log(test);

这样一来就清晰多了吧,相信大家应该都能看明白。

接下来我们看一个复杂点的。

var test = 'test';

console.log(test);//1

function fn(){

console.log(test);//2

 var test = 'function test';

console.log(test);//3

}

fn();

console.log(test);//4

依次输出 test undefined function test test; 相信这个大家都明白,原理与上面一样。

函数内部被解析为 

var test;   //定义test 

console.log(test); //输出test,值为undefined,因为当前环境内存在test,不在作用域链中向上查找test, 故此输出undefined

test = 'function test'; //  给test赋值为 'function test'.

console.log(test); //输出test ,值为function test;

我们在看一个例子

console.log(test);

var test = 'test';

function test(){}

console.log(test);

函数与变量同名的情况,当然。这种情况实际开发中几乎不会遇到。

上面这个例子会输出 function test(){} 然后输出 'test', 原因是因为funciton会比var先解析。  

而在javascript中,函数是对象,函数名却是一个变量(变量里保存的是函数的引用)。

所以在在遇到第一次输出test时,输出的不是undefined 而是将函数输出。

后面的执行过程大家应该都清楚了。 

我们最后在看一个例子,


function fn(){
test = 'bbb';
var test = 'ccc';
console.log(test);
}

fn();

console.log(test);

按照正常思路,似乎会输出ccc,然后输出bbb。因为test 前面没有var 此时它代表全局变量。 

然而很不幸的是,会输出'ccc'然后抛出一个错误.原因是test不存在。

原因是什么呢,很简单。因为fn内部解析过程是这样的。

var test;

test = 'bbb';

test = 'ccc';  

故此test = bbb 实际是对函数内部的test 进行操作。 

由此上例子我们可以的大一个结论,在js中调用可以在定义前面的,不止是function;变量也可以,见下例;

function(){

test = 'ttt';

alert(test);

return;

var test;

}

此时的test依旧是函数内部变量。

以上便是var的关键字的一些特性,如有错误或遗漏之处。欢迎指出。

阅读(1213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~