javascript 中的作用域链的问题


 // 1

xo = 'tomcat';

   

function Func(){

    var xo = "seven";

    function inner(){

   

        console.log(xo);

    }

    return inner;

}

   

var ret = Func();

ret();

// 输出结果: seven


 // 2

xo = 'tomcat';

   

function Func(){

    var xo = "mei";

    function inner(){

   

        console.log(xo);

    }

    xo = 'seven';

    return inner;

}

   

var ret = Func();

ret();

// 输出结果: seven



xo = 'tomcat';

  

function Bar(){

    console.log(xo);

}

   

function Func(){

    var xo = "seven";

       

    return Bar;

}

   // 3

var ret = Func();

ret();

// 输出结果: tomcat

// 这三个代码块 到底是怎么运行的???????????

// 求解释 

HOTLINE
浏览 1433回答 1
1回答

joffyzou

1、ret=inner(),是在 Func() 函数内定义, 此时变量 xo 的值是 "seven" ,虽然 xo 是全局变量,但是在函数作用域内被重新赋值。2、Func() 函数内部 xo 的值最后是 'seven',Func() 返回一个函数,这是闭包。当 ret() 执行的时候,实际上是执行了 inner() 。3、ret() 实际上执行了 Bar(),xo 的值就是全局变量下的 'tomcat'。变量不是在哪里执行寻找值,而是在哪里定义寻找值。
打开App,查看更多内容
随时随地看视频慕课网APP