function hi(){
var a = 1;
return function(){
console.log(a++);
};
};
var aaa = hi();
var bbb = hi;
aaa();
aaa();
bbb();
这段代码中 aaa与bbb的区别是什么?
function hi(){
var a = 1;
return function(){
console.log(a++);
};
};
var aaa = hi();
var bbb = hi;
aaa();
aaa();
bbb();
这段代码中 aaa与bbb的区别是什么?
bbb
就是hi
本身,换句话说就是外层的function。bbb()
的结果应该跟hi()
的结果一样。
aaa
是hi()
调用之后返回的那个东西,也就是说它是里层的function,a
是它闭包里面的一个对象。aaa()
的调用结果是console.log(a++)
。
hi()是将hi函数运行之后返回 function(){console.log(a++)}
,这种返回值是函数的方法叫做函数式编程,楼主可以查找下相关的资料看看。
aaa 的值是 function(){console.log(a++)}
,而aaa再次运行的话就会打印出来a的值,这个地方可以看下上面那个hi函数,其中包含一个闭包,也就是说hi函数返回的function(){console.log(a++)}
这个函数会一直保持着对引用,也就是说每调用一次 aaa ,那么打印的值都会加上1,关于具体的闭包,楼主还是可以自己查查资料
bbb 的值就是hi函数,这是一个普通的赋值操作
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.8k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.8k 阅读
5 回答7.1k 阅读✓ 已解决
aaa
是将hi()
的运行结果赋值给它,即return
返回的匿名函数,此时有一个闭包,则每次调用aaa
时都访问的同一个a
,aaa()
第一次运行结果为1
,第二次为2
而
bbb
将是将hi
这个函数名赋值给它,则调用bbb()
后返回一个函数表达式,即function(){console.log(a++)};