涉及setTimeout时,词汇作用域在这里如何工作?
涉及setTimeout时,词汇作用域在这里如何工作?
请考虑以下代码:
function foo (){
var count = 40;
setTimeout(function bar(){
console.log(count)
})
count = 50;
}
foo();
此将正确打印50
,这很好。但是,如果我只是将count
作为参数传递给函数bar
,它将打印undefined
。为什么它不从其词法范围中取值?
function foo (){
var count = 40;
setTimeout(function bar(count){
console.log(count)
})
count = 50;
}
foo(); //Prints undefined
回答如下:在第一种情况下,您的函数具有要计数的闭包,并且由于setTimeout回调在赋值之后运行,因此您会看到值50。
在第二种情况下,您的函数接受一个称为count的参数。该参数比闭包更强大,并且由于您没有将其传递给函数,因此它是未定义的。
最新文章
- 在php中调用接口以及编写接口
- matlab回归分析sst
- 俞敏洪励志演讲:摆脱恐惧
- Annotation 介绍
- 服务器iis短文件名漏洞,IIS短文件名漏洞分析及一个实例
- MSYS安装
- 支付宝通过招行网上银行付钱,最多每笔500块
- APP 专项测试之兼容性测试
- ext4 笔记一(与ext3比较)
- EXT3文件系统修复
- 欧几里得距离和曼哈顿距离
- c语言判断正整数x是否为同构数,c语言上机题库(阅读).doc
- pgpool
- 基于离散小波变换 (DWT)的图像信息隐藏算法
- YOLOv3算法
- python try:except: 捕获到的异常输出到 log文件
- socat 虚拟串口在 linux OS中如何实现?