
1 ccyu220 2020 年 4 月 9 日 let 不允许重复声明,都用了 es6 你重复声明 let gogogo 干嘛。 |
2 ccyu220 2020 年 4 月 9 日 |
3 baxtergu 2020 年 4 月 9 日 这样改应该就可以了,let 定义的变量名不允许重定义,但是允许重复赋值。 window.Onload= function () { let gogogo; let btn1 = document.getElementById('btn1'); btn1.Onclick= function () { clearInterval(gogogo); gogogo = setInterval(function () {省略...}) } |
4 useben 2020 年 4 月 9 日 我是被头像吸引进来 |
8 Jirajine 2020 年 4 月 9 日 via Android |
10 suckli 2020 年 4 月 9 日 我是被头像吸引进来 |
11 lzxz1234 2020 年 4 月 10 日 提问的艺术第一条:换个好头像 |
12 fueen 2020 年 4 月 10 日 头像+1 |
13 iMiata 2020 年 4 月 10 日 头像选得好,绅士少不了 |
14 wgbx 2020 年 4 月 10 日 论头像的重要性,var 可以重复声明,let 不允许,ps:var 作为一种过时的声明方式,建议只使用 let 和 const |
15 ElmerZhang 2020 年 4 月 10 日 建议楼主读一下 《 ES6 标准入门》 |
16 ElmerZhang 2020 年 4 月 10 日 除非完全没有编程基础,否则学习一门新语言时最好买本书从基本语法入手。 |
17 werty 2020 年 4 月 10 日 头像+1 |
18 Curtion 2020 年 4 月 10 日 这是因为 let 暂时性死区问题,onclick 中调用 clearInterval 函数时会用到 gogogo 变量,此时因为使用了 let 所有存在 TDZ 问题,导致并不会向上级作用域寻找 gogogo 变量,所有会报 Cannot access '' before initialization 错误。 clearInterva 没有中止有两个原因,一是因为 onclick 中使用了 var 定义变量,每次点击时的 gogogo 都是新的,结果就是不但没有停止,每次点击时还新建了一个定时器;如果把 var 去后也无法停止,原因是虽然停止了定时器,但是又新建了一个定时器。 我感觉很奇怪的就是: console.log(a) let a = "1" 报的错误是:Uncaught ReferenceError: a is not defined 而: function main() { console.log(a) let a = "1" } main() 报的错误是:Uncaught ReferenceError: Cannot access 'a' before initialization 我怎么感觉这是同一种错误.... |
19 djs 2020 年 4 月 10 日 via iPhone let 可以导致暂时性死区,在你用的 let 那个位置,要先生命变量才行 |
20 vivipure 2020 年 4 月 10 日 建议 直接看 ruanyifeng 的 ES6 或者 MDN 文档 |
21 kingthy 2020 年 4 月 10 日 @Curtion 是同一个错误,ReferenceError,只是描述不一样,你把它看为第一种是编译期错误,第二种是运行期错误。比如第二种 function main() { console.log(a) let a = "1" } |
22 kingthy 2020 年 4 月 10 日 怎么自动发布了,补上面: |
23 kingthy 2020 年 4 月 10 日 怎么自动发布了,补上面:方法定义后不执行是可以“编译”通过的 |
24 ourFEer 2020 年 4 月 10 日 我是被头像吸引进来的 |
25 Cielos OP 非常感谢大家的回答! |
26 theohateonion 2020 年 4 月 10 日 @ccyu220 并不是 let 不允许重复声明,而是 18 楼说的死区问题 |