<!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的作用域(这个比较简单而且很重要),再看是否有兴趣去了解闭包(个人觉得理解了作用域,闭包也不需要刻意去学)
添加回答
举报
0/150
提交
取消