为了账号安全,请及时绑定邮箱和手机立即绑定

关于onclick事件

关于onclick事件

Dream0703 2016-08-28 23:36:23
<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>layer js</title></head><body>    <div>        <div>            <img src="static/images/bg.png" alt="">            <input type="button"onclick="mm()" id="btn" />        </div>        <div></div>    </div></body>    <script type="text/javascript">        window.onload=function(){             var btn=document.getElementById("btn");             function mm()           {                               var sHeight=document.documentElement.scrollHeight;                var sWidth=document.documentElement.scrollWidth;                var mask=document.createElement("div");                mask.id="omask";                mask.style.height=sHeight+"px";                mask.style.width=sWidth+"px";                document.body.appendChild(mask);                var oimg=document.createElement("div");                oimg.id="img";                oimg.innerHTML="<img src='static/images/bg.png' alt='' />";                document.body.appendChild(oimg)                alert("sssss")            }        }    </script></html>为什么我把mm函数写在window.onload里,点击按钮会报错。说mm()没定义呢,去掉window.onload就好了
查看完整描述

1 回答

?
stone310

TA贡献361条经验 获得超191个赞

这是一个典型的作用域问题,window.onload=function(){}这就是一个外部函数(函数作用域),那它里面的变量、函数,超出这个作用域就无效了,是不能被外面直接调用的,解决办法

1、封装函数(就是你说的把window.onload去掉,所有定义的变量全部放在mm函数里面)

2、写一个闭包(就是写成 return function mm(){},然后外部调用window.onload()(),两个括号),非常不推荐,写的丑乱难看,而且复杂

可以先去了解一下JS的作用域(这个比较简单而且很重要),再看是否有兴趣去了解闭包(个人觉得理解了作用域,闭包也不需要刻意去学)


查看完整回答
2 反对 回复 2016-08-29
  • 1 回答
  • 1 关注
  • 1319 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信