学习笔记: JS变量声明与arguments对象的特点
Time: 10-02-1 Comments: 2
最近看了NCZ的Answering Baranovskiy’s JavaScript quiz,文章通过具体的例子说明了变量声明,arguments对象,this的特点,我对变量声明和arguments对象的理解较浅,这里整理一下我对这两个知识点的理解…
一. javascript引擎会将变量声明”放到”所有语句的前面,优先解释(传说中的预编译),而对于同名变量,函数声明的优先级要高于var声明,但变量初始化的优先级又高于函数声明。
例一:
function exam() {
alert(1);
}
var exam;
alert(typeof exam); // 这里输出function, 因为函数声明的优先级高于var声明
例二:
function exam() {
alert(1);
}
var exam = 2;
alert(typeof exam); // 这里输出number, 因为exam初始化时(exam = 2;)覆盖了exam的函数声明
例三:
var exam,
func = function exam() {alert(1);};
alert(exam);
// IE下,输出function exam() {alert(1);}(被当做函数声明),非IE下,输出undefined(被当做函数表达式)
二. arguments对象
文中提到的一个关键点:我们通常用arguments[arg](arg为非负整数)的方式去获取对应的参数值,当arg小于arguments.length时,arguments[arg]会和它对应形参的值会始终保持相同,这是由于javascript引擎会保持对它们的内存空间进行同步,这意味着,改变一方的值,另一方的值也会做出相同的改变,这一点可以通过下面的例子来证明:
function b(x, y, a) {
arguments[2] = 10;
alert(a); // 此时输出的不是3,而是10
}
b(1, 2, 3);

Comments
南芝 at 2010年02月2日 7:56 上午
印象中,例三那个跟ecmascript版本有关系。。。有些版本不支持被声明过的匿名函数。。。晚上查下权威指南,记得是第八章的东西
Author comment by Tcer at 2010年02月2日 9:08 下午
@南芝, 记得及时向党汇报你查《权威指南》的结果~~~~