javascript闭包
来源:互联网 发布:linux 安装oracle12c 编辑:程序博客网 时间:2024/05/16 10:09
问题一:
<script>
function say667(){
var num = 666;
return function(){
alert(num);
}
num++;
alert(num);
}
var sayAlert = say667();
sayAlert();
</script>
问题二:
function say667() {
var num = 666;
var sayAlert = function() { alert(num); }
num++;
return sayAlert;
}
var sayAlert = say667();
sayAlert()
问题一:为什么会弹出666,而不是666,再弹出667.
问题二:与问题一(弹出666)相比,为什么会弹出667
solution:
问题一,var sayAlert = say667();,在say667() 函数中执行了 return function(){alert(num); }后面的代码没有执行,并且sayAlert这个变量就是function(){alert(num); }函数,所以只会弹出666。
问题二,var sayAlert = say667();,在say667()函数中 var sayAlert = function() { alert(num); }只是定义sayAlert是个函数,而并没有执行,当执行sayAlert();的时候才弹出667
这里是百度lmy_sk521 网友的答案;
我想补充一点的是:这里的无论是第一还是第二个问题,say667();这个条语句都是触发了对应的say667()的方法的。
第一种执行到return,然后就把执行方法体的语句返回了。后面的语句不执行。
第二种也是执行到return,但是这儿返回的是赋值后的函数体对象。(类似于包含了语句的程序对象。但是不执行。
方法体只进行了“=”操作,只有等到下次调用该方法体对象才执行。)
方法体的赋值语句都是不执行的,直接返回含了语句的程序对象......
更详细的闭包解释和例子可以参考http://www.cnblogs.com/hongchenok/p/3588030.html
- 【JavaScript】Javascript闭包
- javascript的闭包javascript
- Javascript闭包演示javascript
- [ javascript ] javascript闭包测试!
- 【javascript】javascript中的闭包
- 【javascript】学习Javascript闭包
- 理解 JavaScript 闭包
- javascript 闭包
- javascript闭包
- Javascript闭包
- JavaScript中的"闭包"
- JavaScript 闭包
- javascript中的闭包
- 理解 JavaScript 闭包
- Javascript Closures[闭包]
- javascript闭包
- Javascript 闭包详解
- Javascript闭包技术
- eclipse怎么设置字体大小
- 调用微信接口--机器人自动回复(涉及到远程调用接口以及处理xml文件的方法)图灵机器人
- ASP.NET获取客户端及服务器的信息
- VC中".pch"是什么文件,没有.pch文件怎么办
- 利用gallery在Ubuntu Scope中显示多张图片
- javascript闭包
- 创建回调函数
- Uva - 12545 - Bits Equalizer
- android dialog圆角显示及解决出现的黑色棱角
- poj2923 Relocation
- 虚拟机入门(2)之虚拟机的三种网络模式
- SQLyog v11.24查询MySQL5.6.24中文乱码的解决方法
- Virtual Box 桥接或NAT上网 和 host-only方式
- TCP/IP三次握手及断开四次握手过程