iT邦幫忙

第 11 屆 iThome 鐵人賽

1
自我挑戰組

JavaScript核心篇系列 第 18

【JavaScript 核心】參數 #18

  • 分享至 

  • xImage
  •  

一個函式可能會有哪些變數?

  • 傳入的參數
  • 區域變數
  • 類陣列:無論傳入多少參數都可全部接收。
  • this:在執行函式時會自動帶入的一個變數,執行物件內函式的 this 會與一般函式有所不同。
  • 全域變數

hoisting 會不會影響參數的運行?

  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 為類陣列,並不是一個純陣列
  • 只能用部分陣列方法(ex: for loop)
  function callArg(a) {
    console.log(a, arguments);
  }
  callArg(1, 2, 3, '4');
  // 1, Arguments(4) [1, 2, 3, "4"]

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

尚未有邦友留言

立即登入留言