var add1 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}()
add1()
add1()
console.log(add1()); //13
var add2 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
add2()
add2()
console.log(add2()); //11
var add3 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}
add3()()
add3()()
console.log(add3()()); //11
如果要每执行一次函数都让a加1,并保存这个局部变量,就只能按第一种自执行的方式来写。后面两种不能达到想要的目的,哪位大神能告诉我这是为什么呢?
6 个解决方案
#1
第一次问问题,请懂的大神不吝赐教~
#2
var add1 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}()
console.log(add1);//add1是f函数,只有调用f函数才能让在f函数之外定义的a变量每次增加。
add1()
add1()
console.log(add1()); //13
var add2 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
console.log(add2);//add2是外面的匿名函数,a变量是在匿名函数中定义的,每次调用add2函数都会重新把a赋值为10,再加1。
add2()
add2()
console.log(add2()); //11
var add3 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}
console.log(add3);//add3是外面的匿名函数,同add2。
add3()()
add3()()
console.log(add3()()); //11
console.log(add3());//但是,“add3()”的返回值却是f函数,同add1。
var add4 = add3();//add4是f函数
add4()
add4()
console.log(add4()); //13
#3
add2 = (function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
})();
要这样写
或者写的清晰明白
var f = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
var add2 = f();
var a = 10;
function f(){
return a=a+1;
}
return f();
})();
要这样写
或者写的清晰明白
var f = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
var add2 = f();
#4
谢谢回复,那我想问一下是不是可以理解为add3()()直接执行的话其实是先调用那个匿名函数,然后再返回f()再调用,就跟add2一样了,是这个意思吗?
#5
谢谢回复,虽然你写的两个都应该是 return f;才能正确执行
#6
是的,你理解正确
#1
第一次问问题,请懂的大神不吝赐教~
#2
var add1 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}()
console.log(add1);//add1是f函数,只有调用f函数才能让在f函数之外定义的a变量每次增加。
add1()
add1()
console.log(add1()); //13
var add2 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
console.log(add2);//add2是外面的匿名函数,a变量是在匿名函数中定义的,每次调用add2函数都会重新把a赋值为10,再加1。
add2()
add2()
console.log(add2()); //11
var add3 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}
console.log(add3);//add3是外面的匿名函数,同add2。
add3()()
add3()()
console.log(add3()()); //11
console.log(add3());//但是,“add3()”的返回值却是f函数,同add1。
var add4 = add3();//add4是f函数
add4()
add4()
console.log(add4()); //13
#3
add2 = (function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
})();
要这样写
或者写的清晰明白
var f = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
var add2 = f();
var a = 10;
function f(){
return a=a+1;
}
return f();
})();
要这样写
或者写的清晰明白
var f = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
var add2 = f();
#4
var add3 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}
console.log(add3);//add3是外面的匿名函数,同add2。
add3()()
add3()()
console.log(add3()()); //11
console.log(add3());//但是,“add3()”的返回值却是f函数,同add1。
var add4 = add3();//add4是f函数
add4()
add4()
console.log(add4()); //13
谢谢回复,那我想问一下是不是可以理解为add3()()直接执行的话其实是先调用那个匿名函数,然后再返回f()再调用,就跟add2一样了,是这个意思吗?
#5
add2 = (function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
})();
要这样写
或者写的清晰明白
var f = function(){
var a = 10;
function f(){
return a=a+1;
}
return f();
}
var add2 = f();
谢谢回复,虽然你写的两个都应该是 return f;才能正确执行
#6
var add3 = function(){
var a = 10;
function f(){
return a=a+1;
}
return f;
}
console.log(add3);//add3是外面的匿名函数,同add2。
add3()()
add3()()
console.log(add3()()); //11
console.log(add3());//但是,“add3()”的返回值却是f函数,同add1。
var add4 = add3();//add4是f函数
add4()
add4()
console.log(add4()); //13
谢谢回复,那我想问一下是不是可以理解为add3()()直接执行的话其实是先调用那个匿名函数,然后再返回f()再调用,就跟add2一样了,是这个意思吗?
是的,你理解正确