If we think of local variables as properties of some kind of implementation-defined object, then there is another way to think about variable scope.还有一句: JavaScript is a lexically scoped language. 通过英汉词典查出来的意见直接套上去真的不知所云,是不是应该找双解的词典才能理解当中的含义?
希望得到指教,谢谢!

解决方案 »

  1.   

    http://baike.baidu.com/view/2338289.htm实例化的对象
      

  2.   

    JavaScript是一种词法范围的语言。
      

  3.   

    谢谢veryhuger!
    请教你怎么理解“词法范围的语言”?受你的启示,我认为应该译成这样:“如果我们认为局部变量是某种实例化对象的属性,这样的话,我们就可以用另外的角度去看待变量的作用域了。”
      

  4.   

    lexically scoped language ==> 有词法作用域的语言。js是一门有词法作用域的语言。在js中,每个function是一个独立的作用域,即function scope。在js语法中,function内部可以继续定义function,内部定义的function也有一个自己的scope,除此之外,内部函数还有一个外部函数的scope的引用。有了这个scope的引用,内部function就可以访问外部scope中定义的变量了。function如果继续嵌套,scope就成了一条链,这就是scope chain。var var1 = 0;
    function test(){
        var var2 = 1;
        function inner(){
            var var3 = 2;
            function inner_of_inner() {
                alert(var1);
                alert(var2);
                alert(var3);
            }        inner_of_inner();
        }
        inner();
    }
    每个函数内部都保留了上一层函数的scope的引用,以便能查找到上一层定义的变量。在本例中,inner_of_inner函数中使用了变量var1,这个查找过程是:inner_of_inner内部有inner函数的scope引用,于是在inner的scope上查找var1,结果没找到,inner的scope上又保留了test函数的scope的引用,于是继续在test的scope上查找var1,继续查找,直到查找到golbal scope,这时找到了var1。
    如果某个变量,查找到golbal scope仍然没有发现引用,那么就会得到undefine。
    scope chain和prototype chain的概念完全相同,都是追溯查找的方式实现的。
    没有词法作用域的语言,在函数中不会保存上一层作用域的scope引用的。例如C语言,只有global和local两个作用域,不存在scope chain的说法。
    希望我的理解能够帮到你。
      

  5.   

    谢谢!kevinwon1985,长见识了!我再要好好搞懂上下文。
      

  6.   

    l676331991, 谢谢你,前几天看的scope chain,今天又复习一遍了,谢谢!