开发者社区> 问答> 正文

关于function xx(){}和 xx = function (){}的疑问 : 配置报错 

最近刚学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...) 

展开
收起
kun坤 2020-06-03 17:30:42 782 0
1 条回答
写回答
取消 提交回答
  • adda = function  ()  前面没有var 所有是全局的######声明的函数表达式为全局变量,可以在外部调用,是作用域链的原因,具体我也不清楚######是作用域问题###### 这段代码出现了好多全局变量. 按照你所谓的正常的代码,
    adda , aa, bb, result , 这些都是全局范围的.
    这样的代码多了.很可能造成污染. 你所说的替换后不正常. 是由于全局变量没了. adda根本不会被执行. 所以结果无变化. ###### 用firebug看下就知道了 ######变量作用域的问题吧######THX###### 你可以看看作用域和闭包的知识
    http://www.veryued.org/2011/09/javascript-scope-closure-this/
    http://mzhou.me/article/81001/ 这个里面最后一个例子就是你的答案 ######感谢######已找到答案,问题出在小白我之前看的文献理解有误,把function的某些概念搞错了,正确的是var xx = function () {} 才是和function () {}的用法相同,两个的作用域不是全局的,而 xxx = function(){}才是全局变量,所以能在外部调用

    2020-06-05 13:23:52
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载