JavaScript是一种比较“灵活”的语言,很多人看到了“脚本”就看到了“简单”,可谓“一叶障目,不见泰山”也就看不到它的“灵活”更看不到它“灵活”背后所带来的巨大的学习难度;
“JavaScript中的作用域”是一块比较抽象的内容,我将在以下的几小节中作出详细明了的说明,我必须很诚挚地恳求读者多一点耐心与注意:我需要读者多一点耐心,以便让我能够在某些地方,讨论一些看起来也许过分吹毛求疵的细节;读者也需要多一点注意,以便在我竭尽所能的解释之后,能了解某些看起来也许还多少有点暧昧的内容。为了能够说得清楚一点,我愿意冒险说得冗长一些;然而由于我们所讨论的课题本质上非常抽象,即使我已经竭尽所能地仔细说明,也许难免还会留下一些隐晦费解的地方。一 活动的概念:
函数是JavaScript一种常用的代码组织单位,它是JavaScript语法(包括更高的话题,原型,面向对象)的核心基础;
函数被存储时,需要在计算机内存中包含一些东西——如函数的代码,参数表等。;
JavaScript函数调用(执行)时需要在堆栈上保存的东西则包括:变量表、实参表(JavaScript中为arguments)和被调用(执行)者(arguments.callee 自身)。我们定义,如果某个函数被调用,则称这个函数发起了一次活动。同时这些调用时保存的信息就叫做“活动记录实例(ARI,Activation record instance,以下简称活动)”;让我们再来看一下活动(记录)的具体信息:
1. 函数实例地址(arguments.callee)
2. 局部变量表
3. 实参表(arguments表)
4. this指针(也可看做实参的一个)
5. 返回值地址
6. 动态链接
动态链接永远指向某个函数调用时所处的活动(如A活动时调用B,则B的那次活动中,动态链接指向调用它的A的活动)。
例1:
/***函数B**/
function A() {
//B(开始活动)在堆栈中保存B的活动记录;
//同时B处于A的活动之中,故B动态链接指向调用它的A的活动;
B();
}
/***函数B**/
function B() {
alert("Hello World!");
}
//调用A函数,A(开始活动)在堆栈中保存A的活动记录;
A();
浙公网安备 33010602011771号