我提出了两个关闭的例子。第一个工作正常,而第二个没有。现在,我不明白为什么第二种情况会失败。它仍然调用匿名函数3次,并且还必须给出相同的结果。
示例1:(工作正常)
<html>
<head></head>
<body>
<script>
var alpha1 = (function alpha(){
var a = 5;
function beta(){
a = a + 5;
alert(a);
return a;
}
return beta;
})();
alpha1();
alpha1();
alpha1();
</script>
</body>
</html>
示例2:(不起作用且没有错误)
<html>
<head></head>
<body>
<script>
var alpha1 = function alpha(){
var a = 5;
function beta(){
a = a + 5;
alert(a);
return a;
}
return beta;
};
alpha1();
alpha1();
alpha1();
</script>
</body>
</html>
现在,在第二个例子中,我仍然调用函数alpha1 3次;虽然我没有启动它作为IIFE(在第一个例子中)仍然我手动调用它,它必须作为闭包。不应该吗?
答案 0 :(得分:1)
现在,在第二个例子中,我仍在调用函数alpha1 3次;
第一个和第二个的区别是 - 第一个alpha1
是函数alpha
(beta
)的返回值的句柄。每次拨打alpha1();
时,都会调用相同的beta
。
第二个alpha1
是alpha1
本身的函数句柄。每次拨打alpha1();
时,都会返回新的beta
。
答案 1 :(得分:0)
在您的第一个示例中IIFE
将函数返回到alpha1
变量,以便在您调用alpha1
<html>
<head></head>
<body>
<script>
var alpha1 = function (){
var a = 5;
function beta(){
a = a + 5;
alert(a);
return a;
}
return beta;
};
const resp = alpha1();
resp()
resp()
resp()
</script>
</body>
</html>
&#13;