最近刚学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...)
adda = function
() 前面没有var 所有是全局的######声明的函数表达式为全局变量,可以在外部调用,是作用域链的原因,具体我也不清楚######是作用域问题###### 这段代码出现了好多全局变量. 按照你所谓的正常的代码,
adda , aa, bb, result , 这些都是全局范围的.
这样的代码多了.很可能造成污染. 你所说的替换后不正常. 是由于全局变量没了. adda根本不会被执行. 所以结果无变化. ###### 用firebug看下就知道了 ######变量作用域的问题吧######THX###### 你可以看看作用域和闭包的知识
http://www.veryued.org/2011/09/javascript-scope-closure-this/
<a 这个里面最后一个例子就是你的答案 ######感谢######已找到答案,问题出在小白我之前看的文献理解有误,把function的某些概念搞错了,正确的是var xx = function () {} 才是和function () {}的用法相同,两个的作用域不是全局的,而 xxx = function(){}才是全局变量,所以能在外部调用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。