匿名函数不能直接应用全局变量吗?我这样写就不执行了?
var mychar = document.getElementById("con"); function hidetext(){ //var mychar = document.getElementById("con"); mychar.style.display="none"; } function showtext(){ //var mychar = document.getElementById("con"); mychar.style.display="block"; }
上面那位同学已经讲到点子上了,你的代码毫无疑问是没有错的,但是为什么不行的,因为如果你在函数外面获取这个 mychar变量是获取不到的,浏览器解析你的页面代码是从上到下的,当看到函数外的你的全局变量的时候,dom并没有开始加载,这时候他会疑问:'你是谁?'所以变量mychar的至为null;
而在函数里面可以执行是因为当你点击的时候dom已经加载完毕,他可以正常的开心获取到元素节点‘哦,我的id是text啊’
读了后面那节课我意识到我上面这个回答错误了,原来和PHP的不一样。
在js里面,函数体外的声明的是全局变量,函数内也是可以使用的。
那为什么在这里你用了没效果?是因为,浏览器是一行一行渲染HTML页面的,读到 var mychar = document.getElementById("con"); 这一句的时候,它还没读到下面的body部分,所以压根不知道con是什么东西,所以返回的是个NULL。
那在这样的情况下,用户点击按钮,触发事件调用了函数之后,函数里面的 mychar 是个NULL,所以就没有效果了。
所以一般都会把js代码放在底部,比如你试试把整个 <script></script>的代码放到</form> 后面,再点按钮就会发现有效了。
函数是一个独立的玩意,它只认识传进来的参数,不认识其他变量什么的。
除非你在函数体里面定义变量为全局变量,就可以引用函数体外的变量的值了。
你想想,如果当你调用hidetext()函数的时候,会执行hidetext()函数上面的语句吗???????
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>显示隐藏内容</title> </head> <body> <p id="text">我是刘芫</p> <script type="text/javascript"> var mychar = document.getElementById("text"); function show() { mychar.style.display = "none"; } function hidd() { mychar.style.display = "block"; } </script> <input type="button" name="button" value="显示内容" onclick="show()" /> <input type="button" name="button" value="隐藏内容" onclick="hidd()" /> </body> </html>
因为跟页面加载顺序有关 。先加载<p>标签里的内容,再抓取就只要一次
http://www.imooc.com/qadetail/199016
你注释掉了...