以下JavaScript构造称为关闭吗? [复制
-
28-09-2019 - |
题
这个问题在这里已经有一个答案:
(function() {
//do stuff
})();
编辑:我最初认为该构造称为闭合 - 不是捕获变量,它在闭合中引起结果的效果。
这与封闭本身的行为无关 - 我完全理解,不是被问到的。
解决方案
这是一个匿名函数(或更准确地 范围匿名函数)立即执行。
一个人的使用是,在其中声明的任何变量和函数都范围范围为该函数,因此隐藏在任何全局上下文中(因此您获得了封装和信息隐藏)。
其他提示
这是一个匿名功能,但不是关闭,因为您没有提及外部范围
我通常称其为“匿名函数的立即调用”之类的东西。
或者,更简单地说,“功能自我发电”。
有点儿。不过,它并没有真正关闭任何东西,并且立即被称为,因此它实际上只是一个匿名功能。
采用此代码:
function foo() {
var a = 42;
return function () {
return a;
}
}
var bar = foo();
var zab = bar();
alert(zab);
在这里,FOO()返回的功能是关闭。它关闭了一个变量。即使A会长期以来已经超出范围,但通过称其为封闭仍然可以返回该值。
不,封闭是这些界限:
function outer()
{
var variables_local_to_outer;
function inner()
{
// do stuff using variables_local_to_outer
}
return inner;
}
var closure = outer();
闭合保留对返回其函数的本地变量的引用。
编辑: :您当然可以使用匿名功能创建关闭:
var closure = (function(){
var data_private_to_the_closure;
return function() {
// do stuff with data_private_to_the_closure
}
})();
不隶属于 StackOverflow