关于function xx(){}和 xx = function (){}的疑问

pikay 发布于 2013/08/26 18:00
阅读 2K+
收藏 0

最近刚学JS有点搞不懂,之前以为function xx(){}和var xx = function (){}的用法是一样的,直到今天了解闭包的时候发现这个问题


function aa()
{
   var a = 100;
   adda = function () {
       a++;
   }
/*function adda() {
		a++;	
	}*/
	//将adda换成这个就无效了,只能会output一次


   bb = function () {
      alert(a);
   }
/*function bb(){
		alert(a);
	}*/
	//将bb替换成这个能够正常运行
   return bb;
}
var result = aa();
result();
adda();
result();
//正确的结果是先output了100后output了101
为什么把
adda = function () {
       a++;
   }
替换成
function adda() {
	a++;	
    }

就无效了?

小白的问题对于各位来说可能太幼稚了,网上找了很久都没搞清楚这个问题,能帮忙解答吗,跪求(停在这里了T_T...) 


加载中
0
小翔
小翔
adda = function  ()  前面没有var 所有是全局的
0
苏生不惑
苏生不惑
声明的函数表达式为全局变量,可以在外部调用,是作用域链的原因,具体我也不清楚
pikay
pikay
是作用域问题
0
泡不烂的凉粉
泡不烂的凉粉

这段代码出现了好多全局变量. 按照你所谓的正常的代码,

adda , aa, bb, result , 这些都是全局范围的.

这样的代码多了.很可能造成污染. 你所说的替换后不正常. 是由于全局变量没了. adda根本不会被执行. 所以结果无变化.

0
小翔
小翔

用firebug看下就知道了

0
刘地
刘地
变量作用域的问题吧
pikay
pikay
THX
0
Narky
Narky

你可以看看作用域和闭包的知识

http://www.veryued.org/2011/09/javascript-scope-closure-this/

http://mzhou.me/article/81001/ 这个里面最后一个例子就是你的答案

pikay
pikay
感谢
0
pikay
pikay
已找到答案,问题出在小白我之前看的文献理解有误,把function的某些概念搞错了,正确的是var xx = function () {} 才是和function () {}的用法相同,两个的作用域不是全局的,而 xxx = function(){}才是全局变量,所以能在外部调用
返回顶部
顶部