(1)脚本如下:
注释:脚本引入jquery,block2和block1分别为两个div的id名。    var obj={
      a:function(){
        block1.innerHTML='+++';//成功执行
        block1.css('background-color','red')//执行失败,错误提示:Object #<HTMLDivElement> has no method 'css'
      }
    };    function color(){
      var block1=$('#block1');
      $('#block2').bind('click',obj.a);
    };    color();
(2)问题:
1.js中函数的作用域是在定义时就已经确定,即匿名函数(obj.a)被调用时,在它的作用域链中应该是找不到block1的,当执行block1.innerHTML时应该提示"'block1' is not defined"才对。但是为什么block1.innerHTML却成功执行了?
2.blcok1.innerHTML成功执行是否说明匿名函数(obj.a)的作用域中能找到block1?如果是的话,既然能找到block1,为什么block1不是Jquery对象,却是htmlDivElement对象(即block1.css不能执行)?

解决方案 »

  1.   

    var obj={
          a:function(){
            block1.innerHTML='+++';//成功执行
            $(block1).css('background-color','red')//执行失败,错误提示:Object #<HTMLDivElement> has no method 'css'
          }
        };
     
        function color(){
          var block1=$('#block1');
          $('#block2').bind('click',obj.a);
        };
      

  2.   

    你这是jquery和dom混用吧,他们双方都不支持直接混用的。比如你写$("block").css这样试试。
      

  3.   

        var obj={
          a:function(){
            block1.innerHTML='+++';//成功执行,这里的block1并不是color中的block1,这里的就 相当于document.getElementById('block1'),直接用ID名算是一种快捷方式,不过有兼容性问题。
            block1.css('background-color','red')//执行失败,错误提示:Object #<HTMLDivElement> has no method 'css'
          }
        };
     
        function color(){
          var block1=$('#block1');
          $('#block2').bind('click',obj.a);
        };
     
        color();
      

  4.   

    IE6.可以直接用ID "block1" 表示 dom 对象
      

  5.   

    obj中的block1不是function color中的block1,这个你也说了,作用域不同。obj中的block1只可能是全局作用域中的属性,如楼上所说,这个应该是dom对象block1