2016-12-15 66 views
-2

我在“JavaScript中确定指导”读这些行,我无法理解为什么内部函数的作用域链会有所不同,每次函数被调用嵌套函数作用域链中的JavaScript

“在顶部级别的JavaScript代码(即代码不包含在任何函数定义中), 作用域链由单个对象组成,全局对象
在非嵌套函数中,作用域链由两个对象组成
第一个是定义函数 参数和局部变量的对象,th第二个是全球性的对象。
在嵌套函数中,作用域链有三个或更多对象。

了解如何创建对象的链 是很重要的。
当定义一个函数时,它存储范围链然后生效。
当该函数被调用时,它会创建一个新对象来存储其局部变量,并且 将新对象添加到存储的作用域链中以创建一个新的更长的链,该链表示该函数调用的作用域。

对于 嵌套函数,这会变得更有趣,因为每次调用外部函数时,都会再次定义内部函数 。
由于范围链在每次调用外部函数时不同,因此内部函数在每次定义时都会有细微的差别 - 内部函数的代码在每次调用外部函数时都是相同的,但范围与该代码关联链 会有所不同。”

+7

404:未找到问题。 – Lain

+3

请使用“编辑”链接标记引用的部分并将其与问题分开。请也澄清你的问题。 –

+0

完成和thanx。 –

回答

1

每次调用函数的时候,你的功能是调用创建一个新的范围。

定义的任何变量(与var,函数声明,或一个命名参数)在该功能范围内的功能

function foo (bar) { }; 
foo(1); 
foo(2); 

在上面,创建了两个范围。在一个其中,bar是在其他bar1是2


如果函数在另一个函数定义,那么它可以访问它是在创建的范围。

function foo (bar) { return function() { console.log(bar); } }; 
var foo1 = foo(1); 
var foo2 = foo(2); 

分配给foo1的功能可以访问bar1的范围。

分配给foo2的功能可以访问bar2的范围。