JavaScript函數(shù)是一組可以在代碼中重復(fù)調(diào)用的語(yǔ)句,這些語(yǔ)句能夠完成指定的任務(wù)。在JavaScript函數(shù)編寫(xiě)中,函數(shù)參數(shù)和傳遞值是不可避免的話(huà)題,下面將詳細(xì)討論JavaScript函數(shù)傳值的相關(guān)問(wèn)題。
在JavaScript函數(shù)中傳遞參數(shù)和傳遞值是非常常見(jiàn)的。在默認(rèn)情況下,所有的參數(shù)傳遞都是值傳遞,在函數(shù)調(diào)用之后,原始參數(shù)的值是不會(huì)受到影響的。在此基礎(chǔ)上,JavaScript還提供了傳引用的方式,使函數(shù)可以直接訪(fǎng)問(wèn)并修改傳遞參數(shù)的值。
下面就以代碼為例簡(jiǎn)單說(shuō)明一下JavaScript函數(shù)傳值的相關(guān)問(wèn)題:
//通過(guò)值傳遞函數(shù)參數(shù) function funcByValue(val) { val = val + 10; console.log(val); } let num = 10; funcByValue(num); //20 console.log(num); //10
可以看到,在以上代碼中,函數(shù)調(diào)用之后,原始參數(shù)值并沒(méi)有受到影響。
//通過(guò)引用傳遞函數(shù)參數(shù) function funcByReference(arr) { arr.push(4); console.log(arr); } let arr = [1,2,3]; funcByReference(arr); //[1,2,3,4] console.log(arr); //[1,2,3,4]
以上代碼中,函數(shù)通過(guò)傳遞引用的方式,直接修改了傳遞參數(shù)的值。
關(guān)于JavaScript函數(shù)傳值的一些注意事項(xiàng):
1. 在函數(shù)中使用arguments對(duì)象獲取函數(shù)所有的參數(shù),可以將其看作一個(gè)數(shù)組,從0開(kāi)始。
function sum() { let result = 0; for(let i = 0; i< arguments.length; i++) { result += arguments[i]; } return result; } console.log(sum(1,2,3,4,5)); //15 console.log(sum(1,2)); //3
2. 在JavaScript中,所有的數(shù)據(jù)類(lèi)型都是值類(lèi)型,除了對(duì)象和數(shù)組。對(duì)于值類(lèi)型的數(shù)據(jù),在函數(shù)內(nèi)部修改它們的值是不會(huì)改變?cè)贾档摹?/p>
//值類(lèi)型 let a = 10; function changeValue(a) { a = 20; console.log(a); //20 } changeValue(a); //20 console.log(a); //10
3. 對(duì)于對(duì)象和數(shù)組這樣的引用類(lèi)型,在函數(shù)內(nèi)部修改它們的值也會(huì)改變?cè)瓉?lái)的值(引用值)。
//引用類(lèi)型 let arr = [1,2,3]; function changeValue(arr) { arr.push(4); console.log(arr); //[1, 2, 3, 4] } changeValue(arr); console.log(arr); //[1, 2, 3, 4]
在JavaScript中,函數(shù)參數(shù)傳遞和傳遞值都是非常常見(jiàn)的操作。使用JavaScript函數(shù)傳遞引用時(shí),需要小心操作,避免意料之外的變量更改。