在第一个函数里定义了popup和popup1两个变量,在第二个函数里也需要用到这两个变量,测试发现popup必须重新定义,popup1却不需要,这是什么情况?

解决方案 »

  1.   

    var popup1=document.getElementById("popup1"); 
    var popup = document.getElementById("popupcontent");你可以放在函数外边,定义为全局变量,供所有函数使用你之前的处理,肯定是访问不到的,也许出现了错误,只不过页面看上去还算正常,也许你可以通过开发者人员工具来查看控制台所出现的错误
      

  2.   

    不神奇,这 
    popup1  popupcontent  直接可用了。
    早就存在了。
      

  3.   

    确实是,我发现这里直接用id就行了,没必要用document.getElementById再定义变量。
      

  4.   

    ie浏览器可以直接用元素的id访问元素。其它的浏览器必须要用document.getElementById()
      

  5.   

    为了兼容各种浏览器,建议你放在外面定义,但要在id的元素加载完后,获取对象用:document.getElementById("id");
      

  6.   

    因为(某些)浏览器会以id为变量名在全局下创建该dom对象的引用。具体哪些浏览器有这个特性,没兴趣去一一测试,因为这个特性没有什么利用价值,反而有很多副作用。这个特性不是一个标准,因此请不要依赖这个特性,个人觉得,还是乖乖的getElementById吧。
      

  7.   

    JS中变量作用域如下1.一般顺序代码中定义的变量 本质可以看成公用变量 可以在任意位置调用
    2.函数体中定义的变量,一般只有在该函数体中使用,没有办法在该函数之外或者其他函数中使用
    3.特殊情况,比如变量重名,对象属性等等,这个要自己体会就你这个问题,可能如楼上描述DOM元素带id的或者在浏览器中会有自己的同名对象,但极力不建议用这些浏览器的该特性,因为非通用所以按上面的作用域说法,你就应该在顺序代码中靠前的位置把需要多个函数使用的公共变量定义好,而不是定义在函数体中