我试图理解Javascript中的闭包..我创建了一个函数并传递了2个值(a,b)..我想知道内部函数square(x)如何取a的值并在返回square之前返回其正方形( a)+ square(b)..
在案例2中,我做了类似的传递(x,y),但这不起作用..
你能解释一下吗?
案例1
<html>
<head>
<script>
function addsquares(a,b){
function square(x){
return x * x;
}
return square(a) + square(b)
}
document.write(addsquares(2,3))
</script>
<head>
<body>
<body>
</html>
案例-2
<html>
<head>
<script>
function addsquares(a,b){
function square(x,y){
return x * y;
}
return square(a) + square(b)
}
document.write(addsquares(2,3))
</script>
<head>
<body>
<body>
</html>
答案 0 :(得分:0)
所提供的代码中没有涉及关闭。 内部函数立即执行,从外部函数参数传递适当的值。它是调用返回的内部函数(两次并加在一起)的结果,而不是一个闭包/函数对象!
否则,闭包的参数 - 这里是秘密:闭包只是在特定绑定上下文中创建的函数对象 - 就像普通函数一样。以下是实际创建闭包的示例:
function multiply_over_sum(a){
function sum(x, y) {
return a * (x + y);
}
// NOW we create a closure - as a FUNCTION-OBJECT (sum)
// is returned to the caller while maintaining access to the
// current binding context.
return sum;
}
// Then multiply_by5_over_sum is now a FUNCTION-OBJECT
// that has "a" bound to the value 5.
// (It is a closure specifically because it binds to a variable.)
var multiply_by5_over_sum = multiply_over_sum(5);
// This FUNCTION-OBJECT (closure) can be INVOKED like any function
// to yield a value. In this case the values 4 and 3 are passed as
// the arguments for "x" and "y", respectively
var sum = multiply_by5_over_sum(4, 3);
虽然它不是严格正确的(因为闭包绑定到变量 - 而不是值 - 在JavaScript中),上面给出的示例中的闭包可以被视为以下函数:
var multiply_by5_over_sum = function (x, y) {
return 5 * (x + y);
};
也就是说,只捕获了闭包中的变量(“a”)。参数“x”和“y”只是 - 闭包/函数的参数 - 并且只会在调用闭包时绑定到值,如multiply_by5_over_sum(4, 3)
所做。