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

全局变量与局部变量问题,萌新提问~

匿名函数不能直接应用全局变量吗?我这样写就不执行了?

        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";
        }


正在回答

7 回答

上面那位同学已经讲到点子上了,你的代码毫无疑问是没有错的,但是为什么不行的,因为如果你在函数外面获取这个 mychar变量是获取不到的,浏览器解析你的页面代码是从上到下的,当看到函数外的你的全局变量的时候,dom并没有开始加载,这时候他会疑问:'你是谁?'所以变量mychar的至为null;

而在函数里面可以执行是因为当你点击的时候dom已经加载完毕,他可以正常的开心获取到元素节点‘哦,我的id是text啊’

1 回复 有任何疑惑可以回复我~

读了后面那节课我意识到我上面这个回答错误了,原来和PHP的不一样。

在js里面,函数体外的声明的是全局变量,函数内也是可以使用的。

那为什么在这里你用了没效果?是因为,浏览器是一行一行渲染HTML页面的,读到 var mychar = document.getElementById("con"); 这一句的时候,它还没读到下面的body部分,所以压根不知道con是什么东西,所以返回的是个NULL。

那在这样的情况下,用户点击按钮,触发事件调用了函数之后,函数里面的 mychar 是个NULL,所以就没有效果了。

所以一般都会把js代码放在底部,比如你试试把整个 <script></script>的代码放到</form> 后面,再点按钮就会发现有效了。

1 回复 有任何疑惑可以回复我~

函数是一个独立的玩意,它只认识传进来的参数,不认识其他变量什么的。

除非你在函数体里面定义变量为全局变量,就可以引用函数体外的变量的值了。

0 回复 有任何疑惑可以回复我~

你想想,如果当你调用hidetext()函数的时候,会执行hidetext()函数上面的语句吗???????

0 回复 有任何疑惑可以回复我~
<!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>标签里的内容,再抓取就只要一次

0 回复 有任何疑惑可以回复我~

http://www.imooc.com/qadetail/199016

0 回复 有任何疑惑可以回复我~
#1

vivian_菱

https://zhidao.baidu.com/question/368802443099081324.html
2017-03-13 回复 有任何疑惑可以回复我~

你注释掉了...

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

全局变量与局部变量问题,萌新提问~

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信