1
wwqgtxx 2017 年 8 月 27 日
因为闭包
|
2
ClassicOldSong 2017 年 8 月 27 日 via Android
典型的闭包问题
|
3
we2ex 2017 年 8 月 27 日
从 ES6 就不建议用 var 了,用 let 吧
|
5
addywu 2017 年 8 月 27 日 via Android
var 作用域
|
6
klesh 2017 年 8 月 27 日 via Android a[i] = (function (ii){
return function (){ document.get... = ii; }; })(i); |
7
Parabolazz 2017 年 8 月 27 日
搜索一下 js 闭包
|
8
crystom 2017 年 8 月 27 日
相当于 var i 是在外面定义的
|
10
asdf123101 2017 年 8 月 27 日 via Android
楼上都说完了不知道该说什么。典型闭包的问题,MDN 上 let 词条里面有例子和解释。
|
11
xrr2016 2017 年 8 月 27 日
因为运行 `a[6]()` 的时候变量 i 是 10
|
12
qq12345454 2017 年 8 月 27 日
用 let 或者 const
|
13
deepkolos 2017 年 8 月 27 日
for 循环结束之后 i 的值为 10
|
14
autoxbc 2017 年 8 月 27 日 via iPhone 这是求值时机问题,是无形参函数从作用域链检索变量问题
直接说闭包问题,显然是给出了解决方法,却回避了问题自身 |
15
siteshen 2017 年 8 月 27 日 我就想歪楼问下为啥发在 python 节点
|
16
magicdawn 2017 年 8 月 27 日
|
19
kotokz 2017 年 8 月 27 日
这些都是 javascript 的坑,尽量用 let
|
20
POPOEVER 2017 年 8 月 27 日
看你的意图你该在 function 里把 i 传进去呗,直接拿全局 i 当然就是 for 结束后的 10 喽
|
21
autoxbc 2017 年 8 月 27 日 @aliehuhu #18
a[i] 被赋值为函数表达式,也就是函数对象。 函数对象只能记录自己在定义时的作用域链,不能记录在定义时作用域链上的变量的瞬时值。 函数引用的变量的值,要在函数被调用时再去读取。 |
22
FrankFang128 2017 年 8 月 27 日
跟闭包有毛关系?
原因是执行时机。你把 a[6]() 提前执行不就是 6/7/8/9 了吗? 服了上面一群说闭包的。 |
23
FrankFang128 2017 年 8 月 27 日
@autoxbc 所以我说 V2 上面大部分自称前端的都很水。
|
24
lhstock 2017 年 8 月 28 日
额,楼上的所有人。我想说。作用域你妹啊。
> document.getElementById('a1').innerHTML = i; //给此元素内容写入 i 循环完了当然是 10 ; 还有 @aliehuhu a[6]()输出结果为 10 这个说法不对。输出是 undefined ;写入的是 10 |
25
lhstock 2017 年 8 月 28 日
@FrankFang128 握爪
|
26
FrankFang128 2017 年 8 月 28 日 另外,说闭包的人其实说的是「立即执行函数」,这些人把「立即执行函数」称为「闭包」而不自知。
|
27
xman99 2017 年 8 月 28 日
b(6) 已经是调用函数了, 没问题啊
|
30
iWtbAbh 2017 年 8 月 28 日
@lhstock 嗨呦,我选择说话就是错了, 毕竟 v2 大佬多。
虽然被你恶心到了,但我为自己说的话负责。 "输出是 undefined ;写入的是 10" 避免误导别人,这是过程,就花了不到一分钟 在执行 a[6] () 前 i 已经被赋值了,哪来 undefined ?你能给我看看证据么,万分感谢。 不然我说猜的有错? |