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