例子:
let x = 99;
function foo(p = x + 1) {
console.log(p);
}
foo() // 100
x = 100;
foo() // 101
但是,如果我將參數稍微改變一下為:
let x = 99;
function foo(x = x + 1) {
console.log(x);
}
foo() // NaN
x = 100;
foo() // NaN
為什麼會顯示成NaN呢?中間發生了哪些不可看的隱形變化?有知道的,可以告知一下嗎?謝了
漂亮男人2017-05-19 10:46:17
let x = 99;
function foo(p = x + 1) {
console.log(p);
}
// 相当于
let x = 99;
function foo () {
let p;
p = x + 1;
console.log(p); // -> 100
}
下面這段程式碼相當於
let x = 99;
function foo(x = x + 1) {
console.log(x);
}
// 相当于
let x = 99;
function foo() {
let x; // 此时x = undefined;
x = undefined + 1;
console.log(x); // -> NaN
}
也就是說foo(x = x + 1) 裡的x和外面的x沒有半毛錢關係, 是你自己定義在函數內部的。