乱七八糟的事情忙了很久,FBS的计划基本上算是流产了[disinclined],最近事情还没有结束。因为什么本科教学评估,很多烦人的实验报告要写,还加上几篇结业论文。最近有整段的空闲就跑去和考研的兄弟们挤到一起去上自习。大四还上自习的人大致可以分为两种,一种是考研流,一种是号称考研流,后一种也有人说是BT,很遗憾,我被无情划入第二种。考研的人看很厚的书,我也看很厚的书,只不过他们的是考研的书,我看的是JavaScript之类的。考研的人拿笔写个不停,我也拿支笔写个不停,他们是做题目,我是做笔记。

正在看的一本是《JavaScript权威指南》,本来有电子版的,但是太不清晰了,而且再电脑前看书也不是很舒服,愣是从图书馆把这唯一的一本给借到了。看这本书的时候明白了很多以前不曾明白的东西,也纠正了以前一些错误的理解,还做了不少笔记,呵呵^_^

今天要说的是以前我的错误理解——关于JavaScript的局部变量有没有块级作用域一说。以前一直以为JavaScript和C++、Java一样有块级作用域,看了书才知道错了。JavaScript的局部变量作用域应属于函数级作用域(我的说法),即在一个函数中声明的变量,无论是在哪里声明的,在整个函数中它们都是有定义的。

一个简单的例子,局部变量无论在哪里定义,在整个函数中都有作用:

var s=”global”;
function f(){

//输出undefined
document.write(s+”
“);

//s在此处被初始化,但在整个函数中都有定义
var s=”local”;

//输出local
document.write(s+”
“);
}
f();

上面的这个函数和下面的这个函数等价:

function f(){

//局部变量在开头声明
var s;

//输出undefined
document.write(s+”
“);

//s在此处被初始化
s=”local”;

//输出local
document.write(s+”
“);
}
f();

局部变量无块作用域,如下面的代码,i,j,k在的作用域是相同的:

function test(c){
var i=0; //i在整个函数中有定义
if(c>0){
//j到处都有定义,不仅限于这个代码块,但在此处初始化
var j=0;

//k到处都有定义,不仅限于这个循环
for(var k=0;k //c=1时,输出i=0,j=0,k=0
document.write(“i=”+i+”,j=”+j+”,k=”+k+”
“);
}

//c=1时,输出i=0,j=0,k=1
document.write(“i=”+i+”,j=”+j+”,k=”+k+”
“);
}

//c=1时,输出i=0,j=0,k=1
document.write(“i=”+i+”,j=”+j+”,k=”+k+”
“);
}
test(1);

6 Comments

  1. 我也在看这本书。
    anyway。明年过来我们这里做毕业设计吧。有一些事情想跟你聊聊。

  2. 行,没问题。
    可以先过来认识一些技术高手:)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.