# 十一、 函式 `function`
###### tags: `JavaScript` `JS101` `2020七月第二週` `進度筆記` `Lidemy心得` `7/8`
---
數學上的函數 `y=f(x)` 跟程式的函式是類似的東西,函式為丟某個東西進去就會回傳值:

---
## JavaScript 的函式
### 基本結構:
function f() {
return
}
f 為函式名稱,可以更動; () 內放參數,參數名稱也可以隨意更動;
例如:
function f(a, b, c) {
return a + 2*b + 3*c
}
console.log(f(1, 2, 3))
// 答案會是 14 。
---
### 目標可以執行
可以執行物件在區塊內:
function f(x) {
return {
answer: x*2
}
}
console.log(f(10))
// 答案會是 20 。
為何目標 undefined ? :
function f(x) {
return // 這邊會傳回 undefined;
{
answer: x*2
}
}
console.log(f(10))
一行一行看會是 , function f(x) {
return 這是第一句,因後面沒接區塊,所以回傳 undefined
{ answer } 這邊是第二句,會變成無意義。 }
最後跑 console.log(f(10)) , 但因上面已回傳 undefined , 所以會直接印出。
---
### 可以產生陣列
函式區塊內也可以接陣列,假設我要自動產生一個規律到 10 :
function makeArray(n) {
var result = []
for (var i=1; i<=n; i++) {
result.push(i)
}
return result
}
console.log(makeArray(10))
// 會印出 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
最後一行如果改成 `console.log(makeArray)` 則會印出 [Function: makeArray] 這是一個函式。
---
也可更改參數數目,並要求回傳某值到某值之間:
function makeArray(from, to) {
var result = []
for (var i=from; i<=to; i++) {
result.push(i)
}
return result
}
console.log(makeArray(3, 10))
// 會印出 [ 3, 4, 5, 6, 7, 8, 9, 10 ]
參數也可以自己取名,通常建議可以看出 range 的,像是 (from, to) , (min, max) 。
---
也可以傳變數給 console.log(makeArray(3, 10)) :
function makeArray(from, to) {
var result = []
for (var i=from; i<=to; i++) {
result.push(i)
}
return result
}
var a = 3
var b = 10
console.log(makeArray(a, b))
// 會印出 [ 3, 4, 5, 6, 7, 8, 9, 10 ]
最後一行 `console.log(makeArray(a, b))` 表示傳進去的值,其傳進去的值不一定要跟第一行的 `function makeArray(from, to) {` ( )內的參數同名稱,但函式參數名稱,需跟函式區塊內迴圈起始條件和終止條件的名稱一致。
---
也可以不用 console.log 回傳值:
function log(n) {
for (var i=1; i<=n; i++) {
console.log(i)
}
}
log(10)
// 會印出 1 到 10 (隔行)。
---
### 解題的時候不知道怎麼解,可以先從寫 function 開始,先寫一個大綱。
function printTo100() {
}
printTo100
假設寫出從 1 到 100 的偶數:
function logEven(number) {
if (number%2===0) {
console.log(number)
}
}
function printTo100() { //這邊開始都是結構,比較能看出想要做甚麼;
for (var i=1; i<=100; i++) {
logEven(i)
}
}
printTo100(100)
// 會從 2 開始印直到 100 的偶數。
---
自己 try 偶數到 100 :
function printTo100(n) {
for (var i=1; i<=n; i++) {
console.log(++i)
}
}
printTo100(100)
// 。
---
自己 try,自動產生偶數規律到 10 :
function makeArray(n) {
var result = []
for (var i=1; i<=n; i++) {
result.push(++i)
console.log(i)
}
return result
}
console.log(makeArray(10))