javascript中for循环里面套定时器,始终打印结束值原因?
来源:互联网 发布:国家软件水平考试 编辑:程序博客网 时间:2024/06/10 18:03
Javascript
中变量可以存放两种类型的值,一种为原始值(primitive value
),如 Undefined, Null, Boolean, Number, String
。这类值存放在栈内部,每赋值一次就创建一个新的拷贝。另一种为引用值(reference value)
,这类值存在堆内存中,只能通过引用赋值。举例说明:
var a = 'test';//原始值var b = function() {}; //引用值我们来测试下:
var a = 'test';//原始值var b = function() {}; //引用值b.a = 'test';function change(m, n) { m = 'change'; n.a = 'change';}change(a, b);现在变量
a
仍然是 test
,但是 变量 b
的属性 a
的值则已经为 change
,这也就是说前者相当于是拷贝了一份值,而后者则是引用赋值。而闭包问题我是这样理解的,因为
Javascript
只有两种作用域,一是全局作用域,二是函数作用域,它是没有块级作用域的。所以闭包的出现就相当于利用一个匿名函数的壳模拟出一个块级作用域。举个更明显的闭包例子:for(var i = 0; i < 10; i++) { (function(e) { setTimeout(function() { console.log(e); }, 1000); })(i);}
连着上面的知识,这里往匿名函数内部传的参数将会被拷贝一份,也就是说循环没执行一次就拷贝变量
i
的值到匿名函数内部。 这里如果没有闭包的话:
for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 1000);}
由于变量
i
直接暴露在全局作用域内,当调用 console.log
函数开始输出时,这是循环已经结束,所以会输出10个10。这是我对题主问题的理解,希望能对题主有帮助,可能还有不完善的地方,我打算写篇博文好好总结下。
阅读全文
0 0
- javascript中for循环里面套定时器,始终打印结束值原因?
- nodejs -- for循环里面套异步解决 -- 类似并发
- “SET 命令设置的环境变量在 FOR 循环中始终为空”问题的原因与解决方法
- Javascript中for循环
- for循环中变量i始终为length值的分析与解决
- JavaScript中break continue return 结束循环。
- [循环打印]数组套数组
- java for循环里面的数组,并打印出来
- for套for两层循环数据
- JavaScript中for循环和for in 循环的区别
- JavaScript使用for循环完成打印出四种形式的九九乘法表
- javascript解决for循环中i取值的问题
- java里面for循环中i++与++i的区别
- for循环打印字典
- for循环打印金字塔
- for循环打印菱形
- for循环打印矩形
- 【for循环】打印九九乘法表
- L1-032
- Spring对JSON请求加解密
- 精通比特币
- 服务器学习笔记
- linux下eclipse编译带有math.h库的项目
- javascript中for循环里面套定时器,始终打印结束值原因?
- BZOJ2813--奇妙的斐波那契【线性筛】【斐波那契数列】
- 5分钟掌握8个常用交互组件,轻松进阶原型设计
- Swift:XCode8.3.3上传被驳回了- NSPhotoLibraryUsageDescription
- 查看Linux系统版本信息
- 微信公众号杂文(2)获取微信服务器IP
- 三、HTML 属性
- TensorFlow基础:Session(会话)
- JS获取两个元素高度并且设定两个元素高度一致