iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

JavaScript 核心觀念系列 第 23

【Day23】參數

參數

首先我們先看一個範例

function fn(para){
    console.log(para, arguments);
};

fn('weiwei', 2, 3);

範例中我們設立一個參數 para,當我們傳入三個參數時,

只會接收到第一個傳入的參數 weiwei

arguments 會將傳入的參數全部接收,

會形成一個 arguments 的類陣列,

我們將內容點開後,能發現它的結構跟陣列很像

函式內的變數

當我們在函式中宣告一個變數名稱和參數名稱相同時會如何呢?

function fn(a){
    console.log(a);
    
    var a;
    
    console.log(a);
    
    a = 'weiwei';
    
    console.log(a);
};

fn('ming');

我們能看見參數 a 只有最後一個回傳 weiwei

在函式中我們宣告的變數名稱和參數一樣時,

因為變數 a 已經存在,因此 var a 會無效,所以第二個 a 會回傳 ming

而第三個 a 的結果為 weiwei 的原因是因為在 a = 'weiwei' 時,

a 的值已經被修改成 weiwei 了,

因此結果才會回傳 weiwei

函式內的函式

當我們在函式中宣告一個函式名稱和參數名稱相同時會如何呢?

function fn(a){
    console.log(a);
    
    function a() {};
    
    console.log(a);
    
    a = 'weiwei';
    
    console.log(a);
};

fn('ming');

此時前兩個 afunction,第三個為 weiwei

這表示 a() 會因提升(hoisting)效果跑到最前端,

因此可以得知在函式中的 a() 執行時,會在參數傳入之後才進行,

傳入參數

function callMe(d, c, b, a) {
    console.log(d, c, b, a);
};

callMe('a', 'b', 'c');

該範例可以了解到參數的名稱可以自己定義,

而參數的名稱與傳入的值沒有任何關係

callback function

callback function 是將函式當成參數給另一個函式使用

function fnA(name, a) {
    console.log(`${name}你好${a}`);
};

function fnB(fn) {
    fn('weiwei', '阿');
};

fnB(fnA);

在執行 fnB(fnA) 時,我們會先將 fnA 的參數設定在 fnB 函式內,

而此時 fnA 這個函式會在 fnB 中執行


上一篇
【Day22】立即函式(IIFE)
下一篇
【Day24】閉包(Closure)
系列文
JavaScript 核心觀念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言