javascript 闭包是什么

新手求解答~~

收藏 0分享浏览 2162
5年前
跟帖
羽音篠之
5年前

闭包是一个语言现象:在函数执行上下文中使用另一个上下文的变量的现象

比如

// Function Scope A
var a = 5;
setTimeout(function () {
    // Function Scope B
    alert(a);
});

这里的函数执行上下文是 setTimeout 函数(Scope B)而在这个函数里面引用了 a 这个变量(处于函数上下文之外 Scope A),这个现象是不同于数学上对“闭包”的定义的

下面这种调用是普通的函数调用,并不是闭包

// Function Scope A
var a = 5;
(function (a) {
    // Function Scope B
    alert(a);
})(a);

只是普通语言里面常见的调用而已,因为 alert(a) 使用的变量 a 来自 Scope B (函数的执行上下文)

沙发
兔耳小爝
5年前

https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Closures

官方对于闭包的一些解释和例子。

简单来说,参考javascript权威指南的解释:

有一个对套嵌函数的外部引用,并且套嵌的函数将它的引用保留给外围函数的调用对象。结果是,外围函数的一次特定调用的调用对象依然存在,函数的参数和局部变量的名字和值在这个对象中得以维持。

javascript函数是将要执行的代码以及执行这些代码的作用域构成的一个综合体。在计算机科学术语里,这种代码和作用域的综合体叫闭包。所有的javascript函数都是闭包。但是,当一个套嵌的函数以这种方式被使用的时候,常常明确的叫做一个闭包。 
板凳
Huugle
5年前

闭包就是占着茅坑等shi

地板
EllisonLi
5年前

引用了自由变量的函数

4 楼
说几句
广告位 点击查看投放指南

我的收藏