window.onload = function(){
var data = 10;
function log(){
console.log(data);
}
}
上面的代码中闭包是 window.onload 还是 log
1
rotoava 2017-09-27 12:41:46 +08:00 1
闭包是种技术实现,实现了函数(一等函数)的完整性。
按照你的例子要是硬说某某是闭包的话:'''log()''' 及它的外层环境 '''var data''' 是闭包( runtime 把这个闭包实现好了),这个闭包作用是维持 '''log()''' 函数的完整性(如果你想在其他地方用这个 log 也是工作正常的)。 鄙见 |
2
hanangellove 2017-09-27 13:00:17 +08:00
例子中的闭包是 function(){}。
|
3
autoxbc 2017-09-27 13:22:42 +08:00
高程里说闭包是 log()
闭包并不关心外层函数,只关心外层函数限定出的作用域,和访问这个作用域的方法,这个方法被称为闭包 |
4
autoxbc 2017-09-27 13:29:06 +08:00
另外题主这个不是闭包吧,应该这么写
return function log(){...} 闭包必须作为函数的返回值赋值给函数外部的变量,这样才能从外部访问函数内封闭的作用域,不然不能达到预期的目的,也就称不上闭包了 |
5
SuperMild 2017-09-27 13:30:05 +08:00 1
Closures - JavaScript | MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures A closure is the combination of a function and the lexical environment within which that function was declared. 1 楼说的符合这个定义。 |
6
gino86 OP @rotoava @SuperMild MDN 上关于闭包的内容我也看过,不过通常现在网络上很多关于闭包的文章都会明确说某某函数是闭包,包括油管上面的大部分视频都是这样介绍的。当然有的说是外部函数,有的说是内部函数。
但如果运行下面的代码 https://gist.github.com/tangino/b4da28355be2a3362243b27a4845e37d.js chrome 控制台中显示闭包是 window.onload |
7
SuperMild 2017-09-27 14:14:56 +08:00 1
@gino86 你误会了控制台的意思,它的意思是 log 处于一个 closure 环境中,其环境是 window.onload
|
8
SuperMild 2017-09-27 14:17:08 +08:00
console.dir(onload) 才是查看 window.onload 的环境,可以看到它只在 global 里,不在 closure 里
|
9
roadwild 2017-09-27 14:59:51 +08:00 1
|
10
jesseccchen 2017-09-27 20:13:20 +08:00
1 楼说的对。
我们通常说的 return function () {} 这个并不是闭包的定义,而是闭包的应用。在你的例子里 var data = 10 function log () { console.log(data) } 就是一个闭包 |