问答详情
源自:3-5 显示和隐藏(display属性)

为什么变量在函数外定义就得不到结果?

代码:    

<script type="text/javascript"> 

        var char=document.getElementById("con");

        function texthide()

        {

            char.style.display="none";

        }

        function textshow()

        {

            char.style.display="block";

        }

    

    </script> 

疑问:因为两个function调用的对象都是p标签,所以我就在外面定义了char=document.getElementById("con");但是运行的时候发现,这样出来的按钮没有功能,也就是点隐藏、显示都没用,只能点着玩儿= =

而如果把char=document.getElementById("con");分别放到两个function的{}里面,功能就能实现了。

这是为什么呢?

提问者:TicoM 2017-01-13 10:28

个回答

  • 敬的男人
    2017-01-13 10:58:06
    已采纳

    在函数外定义 的变量 要是想在函数内部调用 你在外部定义时候加个global 就可以了 

    var global char=document.getElementById("con");.....其实就是局部变量和全局变量的意思一样,只是形式跟我们平时看到不一样而已,实质还是一样的


  • Molly喜
    2017-12-08 16:36:10

    贴出来的代码已经是全局变量了。

    问题应该出在,你的<script>标签写在head里面或者p标签前面。

    原因:

           浏览器解析HTML文档时,从上往下,由于script在前,所以先解析script,当解析var char=document.getElementById("con");时,浏览器无法抓取到id“con”,因为此id还未解析,所以返回给char变量一个null值。因此,后续点击button也不会出现任何效果。

  • 慕仰1964829
    2017-01-20 11:18:50

    可以不用加global,通过这个问题可以看出你对如何定义变量,变量的作用域,什么是全局变量,什么是局部变量不是很清楚。 在函数外围的,通过 var 变量名=value; 是全局变量,也就是说,这个变量作用于整个代码段;在函数内部,var 变量名=value; 这种叫做局部变量,它的作用范围仅限在函数内部,离开函数,则没定义。如果你一定要在一个函数内部定义一个全局变量,那么则把var 去掉。但是一般我们不会这么用。你在这里犯的错误在于,你把在函数内部定义全局变量的方式,放在了函数外部,程序自然识别不了。

  • qq_我_146
    2017-01-13 10:53:22

    在函数外定义 的变量 要是想在函数内部调用 你在外部定义时候加个global 就可以了 

    var global char=document.getElementById("con");