var x = 1;function foo(x, y = function() { x = 2; }) {
x = 3;
y();
console.log(x);
}foo() // 2var x = 1;function foo(x, y = function() { x = 2; }) { var x = 3;
y();
console.log(x);
}
foo() // 3如上第二段代碼中,我的理解是,函數(shù)foo申明時(shí)參數(shù)中先申明一次x賦值為undefined,函數(shù)y申明,函數(shù)y的作用域鏈指向foo的作用域。然后x被var再次創(chuàng)建同時(shí)覆蓋形參中的x。在函數(shù)執(zhí)行時(shí),由于y中的作用域指向foo,所以其實(shí)是將foo中的x改變?yōu)?,那么第二次打印出來(lái)的也應(yīng)該是2才對(duì)。這么理解錯(cuò)在哪里?
函數(shù)作用域的問(wèn)題
30秒到達(dá)戰(zhàn)場(chǎng)
2018-10-12 06:52:30