WEB开发网
开发学院网页设计JavaScript javascript必知必会之this关键字及scope 阅读

javascript必知必会之this关键字及scope

 2009-09-28 00:00:00 来源:WEB开发网   
核心提示: 请注意上面的代码,其中:global_scope 它是global scopefun_scope 它是 位于一个函数的scopeinner_func_scope 是一个位于一个函数内的函数的scope你也可以继续内嵌函数, 那么会生成若干个scope.于是有个问题出现了, 为什么innerfun

请注意上面的代码,其中:

global_scope 它是global scope

fun_scope 它是 位于一个函数的scope

inner_func_scope 是一个位于一个函数内的函数的scope

你也可以继续内嵌函数, 那么会生成若干个scope.

于是有个问题出现了, 为什么innerfun方法可以引用不在它自身scope的变量?

在回答这个问题之前,需要引入一个概念 scope chain. 所谓的 scope chain 是指 在 javascript 的代码中形成的一个具有优先顺序, 相关的作用域的链.

以上面的代码为例,

对于global的scope而言,它会为自己建立一个global的scope chain(当然此时,这个链只有一个scope).

对于fun函数的scope而言, 它首先建立一个与global相同的scope chain,然后再加入自己的scope(此时,这个 链有2个scope), 类似于这样的结构: global==>fun

对于innerfun而言,除了fun函数所具有的链外,它还会加入自己的scope(当然,此时这个链有3个scope), 类似于这样的结构: global==>fun==>innerfun

scope chain具有下面的特征:

有序

每当建立一个函数时,会自动生成一个scope并加入自己的scope chain中

这个chain类似于一种栈,在查找变量时总是先从顶端查起

参见下图:

javascript必知必会之this关键字及scope

图片看不清楚?请点击这里查看原图(大图)。

上图的3个部分对应上面代码中的三个变量的scope, 并且在对每个变量求值时,是按照 图中的scope chain从上到下依次查找,找到即返回值或者直到穷举了scope chain返回undfined.

上一页  1 2 3 4  下一页

Tags:javascript this 关键字

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接