javascript-闭包
2017-08-10 19:25
218 查看
闭包
要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量变量的作用域
var n=999; function f1(){ alert(n); } f1(); // 999
如何从外部读取局部变量
那就是在函数的内部,再定义一个函数。function f1(){ var n=999; function f2(){ alert(n); // 999 } }
在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的”链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!
function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999
“`
相关文章推荐
- JavaScript 匿名函数(anonymous function)与闭包(closure)
- javascript:复习匿名函数和闭包
- 学习Javascript闭包(Closure)
- javascript作用域和闭包
- JavaScript学习笔记十四:闭包
- javaScript基础之闭包
- Javascript中的闭包
- 你不知道的JavaScript--Item10 闭包(closure)
- javascript闭包
- javascript原型链、闭包学习
- 谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
- JavaScript作用域、上下文、执行期上下文、作用域链、闭包
- 用环境模型来理解javascript中的闭包
- javascript使用闭包模拟私有属性和方法
- javascript 函数初探 (六)--- 闭包初探#2
- JavaScript 关于闭包的思考 总结
- JavaScript关于作用域、作用域链和闭包的理解
- JavaScript中的作用域链和闭包
- JavaScript 闭包深入浅出
- 重识 JavaScript —— 闭包(三)