方函式也有流程分工,參數負責收東西
方函式:(電話再響)喂,你說參數不在東西誰要收嗎?直接放著沒關係,還是有人會幫我收。
我:果然是經營物流嗎?這樣誰會收呢?
function whoIsParameters(){
console.log(arguments);
}
whoIsParameters("Rex","Ray");
猜猜上面最後會印出什麼?undefined
嗎?
不是沒有參數接收嗎?怎麼會?都是arguments暗地裡接收的。
Arguments
它跟...restParameter
同樣會將資料存入陣列中,並可以透過[i]
查詢內容跟length
長度,但它只是個類陣列(Array-like-object)
檢測它是否為陣列:
function trys(){
console.log(Array.isArray(arguments));
}
trys()
這裡顯示的false
代表的是:它並不是真正的Array
,結果看下圖:
function convertToArray(){
//類陣列使用array.forEach
arguments.forEach((i)=>console.log(i));
}
convertToArray(1,2,3,4,5,6)
在上圖,我們嘗試讓所謂類陣列使用Array.methods
,結果如上。
讓它成為真正的鄭列 吧
可透過Array.from()
,就能將類陣列轉換為真正的Array
function convertToArray(){
//將類陣列的轉換結果存入變數x
let x = Array.from(arguments);
//接著使用Array.methods
x.forEach((i)=>console.log(i));
}
convertToArray(1,2,3,4,5,6)
結果就能順利使用了!
arguments
你還可以知道的事非嚴格模式:
下它可作為參數別名,什麼意思呢?
function useArgumentsToParameter(input){
console.log(input,"這裡是隱含參數調整前的");
console.log(arguments[0]);
//我們修改`arguments`的值
arguments[0] = 2486;
console.log(input,"這裡是隱含參數調整後的");
}
useArgumentsToParameter(8+9)
這時你調整arguments
的值,會影響原本的引數值。
嚴格模式下:
agruments
不能作為參數別名arguments
互不受影響,什麼意思?這裡分別修改參數與arguments的值為例:
function useArgumentsToParameter(input){
//新增嚴格模式
`use strict`
console.log(input,"這裡是隱含參數調整前的");
console.log(arguments[0]);
//修改`arguments`的值
arguments[0] = 2486;
//發現不受影響
console.log(input,"這裡是隱含參數調整後的");
console.log(arguments[0]);
//修改參數值
input = 530;
console.log(input,"這裡是參數調整後的");
console.log(arguments[0]);
}
useArgumentsToParameter(8+9);
-- to be continued --
那今天就到這邊摟!今天分享喜歡的歌是:
無妄合作社 No-nonsense Collective〈青春之歌 The Grand Tour〉Official Music Video
https://www.youtube.com/watch?v=qRCnF7SMufo
每天的休息,是為了後面的追求,明天見。
忍者2
MDN