一个javascript的闭包问题,求详细解释

functionsay667(){//Localvariablethatendsupwithinclosurevarnum=666;varsayAlert=functio... function say667() {
// Local variable that ends up within closure
var num = 666;
var sayAlert = function() { alert(num); }
num++;
return sayAlert;
}
var sayNumber = say667();
sayNumber(); // alerts 667

上面那段代码具体怎么执行的?为什么是667不是666?
展开
 我来答
调涉L
推荐于2016-01-22 · TA获得超过1559个赞
知道答主
回答量:137
采纳率:0%
帮助的人:29.4万
展开全部
关于javascript闭包,也许仅一个回答无法说清,推荐你阅读司徒正美大神的博客
http://www.cnblogs.com/rubylouvre/archive/2009/08/21/1551270.html
javascript变量的作用域
和《javascript面向对象程序设计》。
如果我用不标准的语言回答你,那么答案是:
var sayNumber=say667();的过程中执行了say667(),声明了局部变量num=666
和局部变量sayAlert,注意在javascript中函数也是一种数据类型。因为在同个作用域下声明了这个函数,所以在外部调用时有访问num的权限,然后num++,执行sayNumber()时alert的num指向同一个num的引用,而该变量已加1,所以alert 667

重复阅读,弄清我的意思
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
内的权势
2015-02-17 · TA获得超过349个赞
知道小有建树答主
回答量:367
采纳率:50%
帮助的人:274万
展开全部
var sayAlert = function() { alert(num); }
你只定义了没调用,当你var sayNumber = say667();实际就执行了sayAlert,而此时的num=667;所以,你懂了。如果你把num++写在var sayAlert = function() { alert(num);num++; }那就是666
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式