匿名函数不能直接应用全局变量吗?我这样写就不执行了?
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
你注释掉了...