这是JavaScript中的一个闭包我不确定吗?

时间:2013-02-28 14:41:06

标签: javascript

这是JavaScript中的闭包吗?

var test = function(b){
    var a = 1;
    return function(b){
        a + b
    }
};
var c = test(2);

4 个答案:

答案 0 :(得分:2)

引入了一个闭包,然后在test中定义一个返回测试函数本地属性的函数。闭包的一个例子就在这里:

;(function() {

    var local = 123

    window.foo = function() {
        return local
    }
})()

你的例子中非常接近的是currying,它涉及一个返回函数以获取第二个参数的函数。 e.g:

function add(a) {
    return function(b) {
        return a + b;
    }
}

add(5)(6) // 11

答案 1 :(得分:0)

var a;外部函数的参数b和内部函数的闭包的一部分。有关闭包的详细说明,请查看FAQ

var test = function(b){ // <= param b is part of the closure of the inner function
    var a = 1;          // <= a is part of the closure of the inner function as well 
    return function(b){ // <= the inner function
        a + b           // <= here you are just add ind a and b together
                        //    return a + b; //would be more appropriate
    }
};
var c = test(2);

答案 2 :(得分:0)

var globalVar = "xyz";

(function outerFunc(outerArg) {
    var outerVar = 'a';
    
    (function innerFunc(innerArg) {
    var innerVar = 'b';
    
    console.log(
        "outerArg = " + outerArg + "\n" +
        "innerArg = " + innerArg + "\n" +
        "outerVar = " + outerVar + "\n" +
        "innerVar = " + innerVar + "\n" +
        "globalVar = " + globalVar);
    
    })(456);
})(123);
此代码与上述代码相同,但是是写入结果和输出的新方式相同  })(123); 这里首先自动调用外部函数传递参数123,然后 })(456); 自动调用内部函数

请注意,这种方式无需退货

答案 3 :(得分:0)

var globalVar = "xyz";

function outerFunc(outerArg) {
    var outerVar = 'a';
    
     var r3= function innerFunc(innerArg) {
    var innerVar = 'b';
    
    console.log(
        "outerArg = " + outerArg + "\n" +
        "innerArg = " + innerArg + "\n" +
        "outerVar = " + outerVar + "\n" +
        "innerVar = " + innerVar + "\n" +
        "globalVar = " + globalVar);
    
    };
	return r3;
};

var r=outerFunc(123);
r(456);

var r = outerFunc(123); ...在这里我们调用了外部函数,并将结果返回值分配给r变量 我们不能直接使用内部函数。我们必须调用外部函数并将其返回值分配为变量 因为上面的代码返回函数