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 楼说的死区问题
|