为啥fn在第一个案例中出错--未定义,而第二个可以用?

青松100 2020-05-06 12:01:06

求教:以下代码是某视频教程的练习。视频中老师也演示了如何正确写的方法(即你们不用告诉我,如何修改正确)。不过我自己想按自己的思路写,然后出现报错,说fn未定义。在17-20行中,我不能在代码中设一个回调函数fn,然后把fn引到setInterval 中吗?


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>

</style>
</head>
<body>
<button class= 'clear'>clear</button>

<script>
var btn = document.querySelector('button');

var timer= function fn() {
alert('hello');
};
setInterval(fn, 1000);
btn.addEventListener('click',function(){
clearIntervar('timer');
})

</script>

</body>
</html>



但是下面红色的代码是另一个不相关的案例,用fn这种写法,为啥是可以的呢?


var div = document.querySelector('div');
div.addEventListener('click', fn);
div.addEventListener('mouseover', fn);
div.addEventListener('mouseout', fn);

function fn(e) {
console.log(e.type)
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
青松100 2020-05-06
  • 打赏
  • 举报
回复
谢谢大佬 明白 
青松100 2020-05-06
  • 打赏
  • 举报
回复
引用 1 楼 YangjulongTrue 的回复:

<script>
        var btn = document.querySelector('button');
        
       var timer= function fn() {//局部 外面访问不到 和匿名类一样
           alert('hello');
       };
       setInterval(fn, 1000);//你可以用 timer 来替换拿不到的fn
       btn.addEventListener('click',function(){
        clearIntervar('timer');
       })
        
    </script>
谢谢大神指教。 我现在在学的教程是这样定义局部变量的: 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间 我百度到的局部变量为: 局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。 1楼17行的代码,function fn () {} 不是放在一个函数里面,而是把它赋值给var timer.  所以它成了复合语句内部定义的变量,是局部变量? 对吗? 如果我把var timer 去掉,只留function fn() {} 这样可以当全局变量吗
青松100 2020-05-06
  • 打赏
  • 举报
回复
[quote=引用 1 楼 YangjulongTrue 的回复:] 谢谢大神指教。 我现在在学的教程是这样定义局部变量的:
引用
局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间
我百度到的局部变量为:
引用
局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。
1楼17行的代码,function fn () {} 不是放在一个函数里面,而是把它赋值给var timer.  所以它成了复合语句内部定义的变量,是局部变量? 对吗? 如果我把var timer 去掉,只留function fn() {} 这样可以当全局变量吗
YangjulongTrue 2020-05-06
  • 打赏
  • 举报
回复

<script>
var btn = document.querySelector('button');

var timer= function fn() {//局部 外面访问不到 和匿名类一样
alert('hello');
};
setInterval(fn, 1000);//你可以用 timer 来替换拿不到的fn
btn.addEventListener('click',function(){
clearIntervar('timer');
})

</script>

87,914

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧