函数作用链
-
当在某个执行环境引用一个标示符时,会从内到外逐级向上搜索,并严格遵循就近一致原则;
-
作用域可以使变量得到有效,有效的访问;
-
当某个函数第一次被调用时,会创建一个作用域,并将此作用域赋给其一个内部属性[scope];
-
后代的每个执行函数都有一个表示变量的对象的变量对象,全局变量对象始终存在,这也就是为什么我们可以随时访问全局变量;
-
当创建demo()函数时,会创建一个先包含全局变量对象的作用链域,当此函数执行时,就有一个就是本身活动对象被创建,并将其推入作用链的最前端;
-
作用链本质上是一个指向变量对象的指针列表,只是引用,而不是复制或者包含
-
闭包的特点就是,外部函数执行完后,按理说就会被销毁,但是他不会,应为仍然有还在执行的内部函数在应用他,实际是外部函数的执行环境可以被销毁,但被内部应用的活动变量不会被销毁,仍然存在;
-
闭包所保存的是整个变量对象,而不是某个特定变量;
-
闭包就是内部函数保存着对外部函数的引用,外部函数只有当内部函数不访问了才会被销毁;换句话说,及时内部函数被放回了,但他仍然有权访问外部函数中的变量,因为他的作用链中保存着外部函数的作用域;
-
作用亮的前端,始终时候当前执行代码所在环境的变量对象
-
如果这个环境是函数,则其当前活动对象即为变量对象
-
活动对象最开始只包含一个变量,即arguments对象
-
下一个变量来自外部函数,再下一个是再外层函数,一直延续到全局作用域
-
使用var声明的变量会自动被添加到最接近的环境中,如果没有var,就会自动被添加到全局环境中
-
函数参数是按值传值的,而不是引用
-
函数名实际就是对占整个函数总体的引用,函数名加个括号就表示函数执行,这个整个函数总体加个括号也表示函数执行效果一样;
-
经典:实际包的作用就是为内部函数创建一个临时的全局变量函数,把内部函数要一直引用的变量放在外部函数中;外部函数就是为了存放内部函数要一直引用的变量;实际操作的函数是被返回的内部函数
-
经典:避免了一定要把他放在全局作于域中
-
经典:就像在当前环境中又定义一个函数一样;