关闭示例自我调用的部分是做什么的

时间:2018-03-13 09:25:18

标签: javascript function scope closures

我提出了两个关闭的例子。第一个工作正常,而第二个没有。现在,我不明白为什么第二种情况会失败。它仍然调用匿名函数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(在第一个例子中)仍然我手动调用它,它必须作为闭包。不应该吗?

2 个答案:

答案 0 :(得分:1)

  

现在,在第二个例子中,我仍在调用函数alpha1 3次;

第一个和第二个的区别是 - 第一个alpha1是函数alpha beta)的返回值的句柄。每次拨打alpha1();时,都会调用相同的beta

第二个alpha1alpha1本身的函数句柄。每次拨打alpha1();时,都会返回新的beta

答案 1 :(得分:0)

在您的第一个示例中IIFE将函数返回到alpha1变量,以便在您调用alpha1

时它可以正常工作

&#13;
&#13;
<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;
&#13;
&#13;