function callName(a){
console.log(a);
var a;
console.log(a);
a = '杰倫';
console.log(a);
}
callName('小明')
// 小明
// 小明
// 杰倫
hoisting 不會影響 a 的值 除非直接覆蓋
function callName(a){
console.log(a);
function a(){}
console.log(a);
a = '杰倫';
console.log(a);
}
callName('小明')
// f a(){}
// f a(){}
// 杰倫
範例 1
參數的名稱 & 傳入的參數,是沒有關聯性的
主要看接收了幾個值,不會受到外層名稱的影響
接收參數不足時會以 undefined
呈現
function callMore(d, c, b, a) {
console.log(d, c, b, a);
}
var a = 'a';
var b = 'b';
var c = 'c';
callMore(a, b, c);
// a, b, c, undefined
範例 2:傳入物件
function callObject(obj) {
obj.name = '杰倫家';
}
var family = {
name: '小明家'
}
callObject(family);
console.log(family); // {name: "杰倫家"}
範例 3 :如何呈現「小明你好」?
function callSomeone(name) {
console.log(name + '你好');
}
function functionB(fn) {
fn('小明');
}
function callSomeone(name) {
console.log(name + '你好');
}
function functionB(fn) {
fn('小明'); // 實際執行的地方
}
functionB(callSomeone); // 帶入 callSomeone 執行此段表達式
範例 4
arguments
會自動帶入其他參數arguments
為類陣列,並不是一個純陣列 function callArg(a) {
console.log(a, arguments);
}
callArg(1, 2, 3, '4');
// 1, Arguments(4) [1, 2, 3, "4"]