为了账号安全,请及时绑定邮箱和手机立即绑定

js函数作用域的问题

js函数作用域的问题

收到一只叮咚 2018-12-19 18:19:40
在看阮一峰老师的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,倒是符合预期,这是为什么呢?
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

因为你上面代码传入参数function的函数作用域为外层,并非foo里面的,你上面的代码可以改写成这样


var x = 2


function 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里面的x


var x = 2


function 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)

希望能帮到你


查看完整回答
反对 回复 2019-01-26
  • 1 回答
  • 0 关注
  • 412 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信