解决方案 »

  1.   

    var b = "W";   
    var object = {   
            b : "M",   
            getB: function(){    
                               var me = this;
                   return function(){ return  me.b; };   
        }   
    }; 这样是符合你要求的代码 你看下应该能理解了
      

  2.   

    我知道楼上1楼这样改是引用到了object的b,若直接加this是引用了外部的b,但我不知道不加这些前缀是怎么样的流程去找值得,和第一个例子什么区别?
      

  3.   

    网上搜索一下hoisting你就懂了
      

  4.   

    作用环境不一样,第一个一直在同一环境下,
    第二个返回getB后环境变成window,就返回全局变量b了
      

  5.   

    JS裡只有Function有作用域
    IF、FOR、WHILE、JSON等等的都沒有作用域
      

  6.   

    每个function运行时候  都有一个context(注意这个代码是访问不到的 是系统底层的)
    如果这个function运行的时候  里面又调用了一个function  那么嵌套 又产生了一个 context如果你声明了 var a = '100';
    相当于 
    当前 context.a = 100;最外面 的context 就是 window
    不可能存在  脱离context的 变量那么 你的代码   return a; 被执行的时候  会从当前的context开始查找 a
    没有  则从当前context的外层context 查找 (一直查找到 window)上面 是你的 第一段代码 涉及的 概念
    var object = {   
            b : "M",   
            getB: function(){    
                   return function(){ return  b; };   
        }   
    };  这个比较复杂
    根据第一段 概念
    object 这个变量 存在于  context中所以你 return object 是可以的
    但是  b  存在于  object 下面所以你 必须 访问 object.b因为 外面引用的是  object.getB
    所以 object,getB 中的this  表示 object
    var me = this;  相当于  me  = object;然后  return me.b     ==== return  object.b