闭包就是获取其他函数内部变量的函数。
概念理解
1 | function f1() { |
函数外部无法获取函数内部变量,并且函数执行完毕后变量已被销毁。
1 | function f1() { |
在函数内部再定义一个函数,并作为返回值,此匿名函数依赖于f1
,所以f1
执行完毕后并不会被销毁回收,因此可以通过调用返回的匿名函数来获取f1
内部变量n
。
this关键字
函数内部的this
关键字指向的是调用此函数的对象。定义时并没有生效,而是在运行时生效。
1 | name = 'sun'; |
闭包示例
1 | var name = "The Window"; |
如上代码由于运行时this
指向getNameFunc
函数,此函数内没有name
属性定义,因此返回undefined
。
1 | var name = "The Window"; |
通过一层转化暂存this
指向,返回的闭包函数可以获取到object
的name
属性。