一旦設(shè)置了參數(shù)的默認(rèn)值,函數(shù)進(jìn)行聲明初始化時(shí),參數(shù)會形成一個(gè)單獨(dú)的作用域(context)。等到初始化結(jié)束,這個(gè)作用域就會消失。這種語法行為,在不設(shè)置參數(shù)默認(rèn)值時(shí),是不會出現(xiàn)的函數(shù)的擴(kuò)展var x = 1;function foo(x, y = function() { x = 2; }) { var x = 3;
y(); console.log(x);
}
foo() // 3x // 1var x = 1;function foo(x, y = function() { x = 2; }) { let x = 3;
y(); console.log(x);
}
foo() // 報(bào)錯(cuò),Uncaught SyntaxError: Identifier 'x' has already been declared為什么用在函數(shù)內(nèi)部用var申明與相同的參數(shù)變量可行,且會覆蓋參數(shù)中的同名變量;但是使用let 或 const 就會報(bào)錯(cuò),我對使用 let 與 const 還能理解,因?yàn)閰?shù)處相當(dāng)于是用 let x進(jìn)行了申明,后面再用 let 進(jìn)行申明,就報(bào)錯(cuò)了
js函數(shù)內(nèi)部用var 與 let 申明與參數(shù)相同變量名的前者正常,后者報(bào)錯(cuò)
瀟瀟雨雨
2019-03-11 20:07:08