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