这是JavaScript中的闭包吗?
var test = function(b){
var a = 1;
return function(b){
a + b
}
};
var c = test(2);
答案 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);
请注意,这种方式无需退货
答案 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变量 我们不能直接使用内部函数。我们必须调用外部函数并将其返回值分配为变量 因为上面的代码返回函数