welcome to Cheeto's blog

0%

JavaScript核心篇:參數

參數

1
2
3
4
5
6
7
8
9
function callName(a){
console.log('第一個:' +a);

var a;
console.log('第二個:' +a);
a = '杰倫';
console.log('第三個:' +a);
};
callName('小明');

會呈現 ↓

參數覆蓋觀念

所以說用宣告的方式其實沒辦法覆蓋掉的,如果想要覆蓋掉就直接定義一個新的值給 a


下面還有另一個例子

1
2
3
4
5
6
7
8
9
10
function callName(a){
console.log('第一個:' +a);

function a(){};
var a;
console.log('第二個:' +a);
a = '杰倫';
console.log('第三個:' +a);
};
callName('小明');

會呈現 ↓

參數覆蓋觀念2

原因是因為函式會提升,但是本來定義的小明這個值是在函式的參數上面,而function a是在程式碼片段創造的,所以function a是會把小明這個值覆蓋掉的。

物件參數

1
2
3
4
5
6
7
8
function callObject(obj) {
obj.name = '杰倫家';
};
var family = {
name: '小明家'
};
callObject(family);
console.log(family); // 杰倫家

在函式參數當中如果是物件的話,還是會維持原本傳址的特性,所以 family 才會跟著被變動了。

callback function

1
2
3
4
5
6
function functionB(fn) {
fn('小明');
}
functionB(function (a) {
console.log(a); // 小明
});

callBackFunction

  • 洋紅色: functionB 執行時將函式作為參數傳入 fn,並在 functionB 內執行
  • 綠色: fn 的小明作為參數傳遞給 functionB 執行時的函式

這邊換一個範例

1
2
3
4
5
6
7
function callSomeone(name, a) {
console.log(name + '你好' + a);
};
function functionB(fn) {
fn('小明', 1);
};
functionB(callSomeone); // 小明你好 1

Arguments

1
2
3
4
function callArg(a){
console.log(a, argument)
};
callArg(1, 2, 3, '4')

回傳呈現 ↓

Arguments

arguments 是一個類陣列,它可以拿來做 for 迴圈,但是不能拿來做 forEach 之類的功能。