[Day11] 函式 function

函式是 JavaScript 非常重要的特性,指的是将一或多段程序包起来,之後可以重覆使用。JavaScript 在执行时的呼叫堆叠也是以函式作为单位。

用 typeof 去检查一个函式的型别他会显示 function,但他仍然属於 Object 物件型别的一种,可以把它视作可以被呼叫(be invoked)的特殊物件。 -- 008

函式宣告方式有好几种,但通常会有三个部分

  • 函式名称(但也可能没有)
  • 参数,在括号 () 内的部分
  • 执行内容,在大括号 {} 内的部分

这是在 VS code 里的预设范本。function 是函数的宣告方式,通常会给函数一个名称,然後括号是参数(parameters),参数与参数间用 , 隔开。

这边括号中的 params 跟 008 叙述的 arguments 不一样,咦,是什麽意思?
如下写一个简单的 function,下面呼叫函式内的值就是 arguments

function sum(a, b) {
  return a + b;
}
sum(3, 4); // 7,呼叫函式传值给 a, b
sum(6, 7); // 13,呼叫函式传值给 a, b
sum(8, 2); // 10,呼叫函式传值给 a, b
console.log(sum(3, 4), sum(6, 7), sum(8, 2));

搜寻 stackoverflow 里面的回答,简单的说:
Parameter:函式宣告里的参数。
Argument:引数,呼叫函式时传给 params 的资料。

定义函式的方式

  • 宣告函式 - 如上所举例的就是宣告函式。
  • 函式运算式 - 将函式指定给某个变数,就是没有名称的函式。

宣告一个变数 = 一个函式,而函式没有指定名称,称为匿名函式

var QQㄋㄟㄋㄟ好喝到咩噗茶 = function(珍珠, 奶茶) {
  return 珍珠 + 奶茶;
};

也可以再替 function 命名

var QQㄋㄟㄋㄟ好喝到咩噗茶 = function 珍奶(珍珠, 奶茶) {
  return 珍珠 + 奶茶;
};

但这名称只在自己的函式作用域大括号 {} 里有效,离开 {} 变数名珍奶就不存在了。
看使用情境而定,可以透过变数名取得函式,不一定要另外命名。

var QQㄋㄟㄋㄟ好喝到咩噗茶 = function 珍奶(珍珠, 奶茶) {
  console.log(typeof 珍奶); // typeof function
  return 珍珠 + 奶茶;
};
console.log(typeof 珍奶); // typeof undefined
  • 透过 new Function 关键字建立
    使用关键字 new Function 来建立物件函式,但由於每次执行都要解析"字串",运作效能较差,所以实际上较少使用。
var foo = new Function("number", "return number * number");
foo(50); // 2500

呼叫函式的方式

如上的方法,直接输入函式名称(参数),例:sum(3, 4)、foo(50);其他呼叫的方式还有 .call() 跟 .apply(),但还没念到,今天就先到这里。

参考资料

What's the difference between an argument and a parameter? -- stackoverflow
008 天重新认识 JavaScript
QQㄋㄟㄋㄟ好喝到咩噗茶


<<:  Day 26 - Filter 使用方式

>>:  【Day 13】逻辑回归(Logistic Regression)(下)

[DAY12]测试SSH连线

接续之前做容器,希望可以用code连到另台电脑的container,做了ssh的一些测试 先做了一个...

Day29 利用web发送讯息(上)

当我们网页建立了基本的authentcation,接着就能开始建立我们的功能,首先在web上的htm...

商业秘密(Trade Secret) & 版权(Copyright) & 专利(Patent) & 商标(Trademark)

您的公司将源代码视为机密信息;商业秘密保护其机密性。无论版权和专利要求的源代码的公开,但贵公司有意保...

Python 演算法 Day 8 - 理论基础 统计 & 机率

Chap.I 理论基础 Part 4:统计 & 机率 Analyze the data th...

Gulp 压缩优化程序码(2) DAY89

上一篇有介绍压缩的一些套件了 不过有时候 我们在开发的时候 有时压缩 有时不压缩 那要怎麽解决 所以...