为什么setInterval 里面的timer不放var来义定timer,代码还是可以跑出来?

为什么setInterval 里面的timer不放var来义定timer,代码还是可以跑出来?

(function () {

var backtotop = document.getElementById('backtotop')


var timer;

backtotop.onclick = function () {

timer = setInterval(function () {

document.documentElement.scrollTop -= 100;


if (document.documentElement.scrollTop <= 0) {

clearInterval(timer)

}

}, 20)


}

window.onscroll = function () {

// 卷动值

var scrollTop = document.documentElement.scrollTop || window.scrollY;


if (scrollTop == 0) {

backtotop.style.display = 'none';

} else {

backtotop.style.display = 'block';

}

}

})();

相关截图:

http://img1.sycdn.imooc.com//climg/6077e9a009c6df2705940321.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-04-15 15:43:21

同学你好,因为在点击事件函数外声明了变量timer,点击事件函数内部并不是定义timer,而是给timer赋值,所以在函数外还是可以访问的。如下图所示:

http://img1.sycdn.imooc.com//climg/6077ee8e09d24a5905800300.jpg

不太明白同学说的“代码还是可以跑出来”是什么意思,可以详细描述下,便于帮助同学准确的解答,祝学习愉快~

  • 提问者 weixin_慕圣6334738 #1

    老师你好, 我发错图片了, 我就算把上面的var timer;给comment掉,就是不声明timer,直接在函数里面用timer=,也是可以跑的,不知道为什么

    2021-04-15 21:52:09
  • 同学你好,因为在函数内部没有使用关键字var声明的变量timer,属于全局变量,在函数外也是可以访问的,所以也是可以实现效果的。

    老师举一个简单的示例帮助同学更好的理解。如下:

    http://img1.sycdn.imooc.com//climg/6078ea610920e0f510280285.jpg

    控制台输出结果如下:

    http://img1.sycdn.imooc.com//climg/6078ea6e0966a0cc07160215.jpg

    祝学习愉快~

    2021-04-16 09:38:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师