js函数作用域的问题

在看阮一峰老师的es6入门的函数作用域部分时,乱搞出了一段代码,发现了一些问题


var x = 2;

function foo(x, y) {

    var x = 3;

    y();

    console.log(x);

}

foo(1, function() {

            console.log(x);

            x = 5;

        });

结果y中打印出x = 2,为什么不是1或3呢?

foo打印出x = 3


然后稍作调整,


var x = 2;

function foo(x) {

    var x = 3;

    function y () {

        console.log(x);

        x = 5;

    }

    y();

    console.log(x);

}

foo(1);

y中打印的是3,foo中打印的是5,倒是符合预期,这是为什么呢?


收到一只叮咚
浏览 413回答 1
1回答

狐的传说

因为你上面代码传入参数function的函数作用域为外层,并非foo里面的,你上面的代码可以改写成这样var x = 2function test() {    console.log(x) // 会找到外层的 x = 2    x = 5}function foo(x, y) {    var x = 3    y()    console.log(x) // 会找到foo 函数中的 x = 3}foo(1, test)倘若你要是这样,便可以得到foo里面的xvar x = 2function test(x) {    console.log(x) // 会找到外层的 x = 2    x = 5}function foo(x, y) {    var x = 3    y(x)    console.log(x) // 会找到foo 函数中的 x = 3}foo(1, test)希望能帮到你
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript