之前沒有注重基礎,直接去后面看高級內容,結果是一點兒也看不懂,還耽誤了很多時間,現在從基礎、細節開始學JavaScript
先看函數的形參和實參
有下面這個函數
function sum(a,b){
return a+b
}
console.log(sum(1,5))
這個就是一個簡單的函數,其中a,b是形參,console里面的1,5是實參
但是實際上參數的運用復雜很多
arguments
第一點,實參的形參的值的個數是可以不相等的
在每個函數內部都有一個隱式的東西,叫做 arguments,實參列表,是一個數組(實際上是長得像數組的對象),用來接收所有的實參、而不用去管形參有多少個、是否能與實參對應。
arguments.length
可以返回實參的個數,這樣我們就可以用一個循環把實參內的值全部輸出。
function sum(a) {
for (var i = 0 ; i < arguments.length; i++){
console.log(arguments[i])
}
}
sum(a,b,c,d)
在這個函數里面,sum.length
可以返回形參的個數,注意:這里sum不是一個數組,所以不可以用sum[i]來輸出。
當然,這樣可以對任意個數求和,而不用提前設置形參的個數
var result = 0
function sum(c,d,e){
for (var i = 0;i<arguments.length;i++){
result += arguments[i]
}
console.log(sum[0])
console.log(b)
}
sum(1,2,3,4,5,3,2,2,3)
實參和形參的映射關系
如下函數:
function sum(a,b) {
// arguments[1,2]
// var a = 1 實參傳進來后相當于對形參里面的a和b進行了這樣的賦值
var a = 2 // 重新賦值
console.log(arguments[0]) //2 表明形參變實參也會變
arguments[0] = 3 // 對第一個實參重新賦值
console.log(a) // 3 實參變形參的值也會變
}
sum(1,2)
在這里,實參和形參中任何一個變、另一個都會變,但這并不是因為他們是引用值(事實上,它們并不是引用值,而是原始值),而是因為它們之間是映射關系。
還有一種特殊情況
如果實參的數量比形參少,如下代碼
function sum(a,b) {
var b = 2
console.log(arguments[1])
}
sum(1)
這里的輸出結果是undefined,說明實參的個數在它出生時就已經定義好了,后面再對形參進行修改,也不會影響到實參