收到一只叮咚
2018-12-19 18:19:40
在看阮一峰老師的es6入門的函數(shù)作用域部分時(shí),亂搞出了一段代碼,發(fā)現(xiàn)了一些問題var x = 2;function foo(x, y) { var x = 3; y(); console.log(x);}foo(1, function() { console.log(x); x = 5; });結(jié)果y中打印出x = 2,為什么不是1或3呢?foo打印出x = 3然后稍作調(diào)整,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,倒是符合預(yù)期,這是為什么呢?
1 回答

狐的傳說
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
因?yàn)槟闵厦娲a傳入?yún)?shù)function的函數(shù)作用域?yàn)橥鈱?,并非foo里面的,你上面的代碼可以改寫成這樣
var x = 2
function test() {
console.log(x) // 會(huì)找到外層的 x = 2
x = 5
}
function foo(x, y) {
var x = 3
y()
console.log(x) // 會(huì)找到foo 函數(shù)中的 x = 3
}
foo(1, test)
倘若你要是這樣,便可以得到foo里面的x
var x = 2
function test(x) {
console.log(x) // 會(huì)找到外層的 x = 2
x = 5
}
function foo(x, y) {
var x = 3
y(x)
console.log(x) // 會(huì)找到foo 函數(shù)中的 x = 3
}
foo(1, test)
希望能幫到你
添加回答
舉報(bào)
0/150
提交
取消