0

这是 JavaScript 中的闭包吗?

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

4 回答 4

2

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

;(function() {

    var local = 123

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

您在示例中非常接近的是currying,它涉及一个返回函数以获取第二个参数的函数。例如:

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

add(5)(6) // 11
于 2013-02-28T14:48:13.650 回答
0

变量一个; 外部函数的参数 b 是内部函数闭包的一部分。有关闭包的详细说明,请查看常见问题解答

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);
于 2013-02-28T15:29:42.753 回答
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); 自动调用内部函数

注意这种方式没有退货要求

于 2018-09-12T02:47:10.757 回答
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);

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

于 2018-09-12T02:51:46.653 回答