详解JavaScript中的闭包
闭包(重点掌握)
JS也采用词法作用域,也就是说,函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定。为了实现词法作用域,JS函数对象的内部状态不仅包含函数的代码逻辑,还必须引用当前的作用域链。函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性在计算机科学文献中称为闭包。
所有函数都是闭包,都是对象,都关联作用域链。大多数时候,定义函数作用域在调用函数时依旧有效。但是,当定义函数作用域链和调用函数作用域链不同的时候,事情就微妙了。
理解闭包首先要了解嵌套函数的词法作用域规则:
var scope="global scope";//全局变量
function checkscope(){var scope="local scope";//局部变量function f(){ return scope; }//在作用域中返回这个值return f();
}
checkscope();//'local scope'
对以上代码做一点改动:
var scope="global scope";//全局变量
function checkscope(){var scope="local scope";//局部变量function f(){ return scope; }//在作用域中返回这个值return f;
}
checkscope()();'local scope'
未完待续。。。