# 前言
闭包是什么时候被创建的,什么时候被销毁的?具体的实现又是怎么样的?
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
return function () {
return this.name;
};
}
};
alert(object.getNameFunc()());
@前端进阶之旅: 代码已经复制到剪贴板
👆当然了js基础扎实的,一定明白里面的端详,看完一下内容,对于这道题一定就能游刃有余的解决了✊
点这里看
obj.getNameFunc()()实际上是在全局作用域中调用了匿名函数,this指向了window。这里要理解*函数名与函数功能(或者称函数值)是分割开的,不要认为函数在哪里,其内部的this就指向哪里。匿名函数的执行环境具有全局性,因此其 this 对象通常指向 window
# 什么是闭包
来看看红宝石怎么说的👇
闭包是指有权访问另外一个函数作用域中的变量的函数
@前端进阶之旅: 代码已经复制到剪贴板
先来看看MDN定义👇
函数和对其周围状态(**lexical environment,词法环境**)的引用捆绑在一起构成**闭包**(**closure**)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。
@前端进阶之旅: 代码已经复制到剪贴板
👆上面定义大概就是:闭包是指那些能够访问自由变量的函数。其中自由变量,指在函数中使用的,但既不是函数参数arguments也不是函数的局部变量的变量,其实就是另外一个函数作用域中的变量。
网上对于闭包的定义各种各样,每个人对闭包的理解不同,自然定义就不同,那么我也不去定义闭包,自己意会吧👊
@前端进阶之旅: 代码已经复制到剪贴板
非要理解的话,有两种理解:
:one:闭包是嵌套的内部函数(绝大数人)
:two:包含被引用变量(或函数)的对象(极少数人)
我觉得闭包存在与嵌套的内部函数中😊
我们针对第二个理解,写一个demo👇
function count () {
var x = 0
return {
add() {
x++;
},
print() {
console.