關於為函數形參賦值和搜索變量標識符的雲雲
阿新 • • 發佈:2018-04-06
info 吐槽 body 建議 blank 代碼檢查 聲明 ren 技術
為形參提供默認值是以前的一種流行方法:
function foo(a){ a=a||1; console.log(a); } foo(); // 1 foo(12); // 12
你看,如果函數調用時不提供實參,形參a會被賦1。另:最好不要修改形參,參見竟然修改形參有這麽可怕的後果。
形參本身是局部變量,只能在函數內訪問:
function foo(a){ console.log(a); } foo(12); // 12 console.log(a); // Uncaught ReferenceError: a is not defined
比如,你可以這樣:
function foo(){ a=‘lala‘; } foo(); console.log(a); // lala
引擎在foo函數的作用域和全局作用域找不到名為a的變量,在非嚴格模式下就會在全局作用域創建一個名為a的全局變量,此時如果為函數添加名為a的形參就可以
阻止這種事情發生:
function foo(a){ a=‘lala‘; } foo(); console.log(a); // Uncaught ReferenceError: a is not defined
因為引擎已經在函數的作用域內找到了名為a的變量,所以不會在全局作用域創建名為a的全局變量,此時,如果再在函數內聲明名為a的變量就已經是重復聲明了:
function foo(a){ var a=‘lala‘; console.log(a); } foo(); // lala
此時JShint等代碼檢查工具就會警告:
雖然JS的重復聲明會被引擎忽略,但不建議這麽做。
最後,我真想吐槽博客園的光標,特麽的怎麽總是莫名其妙跳到別處!害得總是修改原來寫好的代碼!
以上。
關於為函數形參賦值和搜索變量標識符的雲雲