Upgrade to Pro — share decks privately, control downloads, hide ads and more …

javascriptの基本からjavascriptを使った動的な動きについて柔軟に対応できる力...

Avatar for BigWestGang BigWestGang
January 21, 2019
67

javascriptの基本からjavascriptを使った動的な動きについて柔軟に対応できる力をつけるjs勉強会 第三回

Avatar for BigWestGang

BigWestGang

January 21, 2019

Transcript

  1. 関数の宣⾔ Javascriptでは、関数を定義する際に function キーワードを使⽤し ます。 下記のように記述します。 // 関数の宣⾔ function 関数名(引数)

    { // 関数を呼び出されたときの処理 return 関数の返り値 } // 関数の呼び出し const 関数の結果 = 関数名(引数) console.log(関数の結果) // => 関数の返り値
  2. ES6の書き⽅ function fn(...args) { console.log(args) } const test = [1,

    2, 3, 4] const test2 = [5, 6, 7, 8] fn(test,test2) /** * => [0] => [1,2,3,4] * => [1] => [5,6,7,8] */
  3. 関数を取り扱う上での注意点 1. 関数は同名定義することで上書き可能である。 const numbers = [1, 2] function sum([arg1,

    arg2]) { return arg + arg2 } function sum([arg1, arg2]) { return (arg + arg2) * 1.08 } console.log(sum(numbers)) // => 3.24
  4. 2. 関数は Object 扱いなので、関数の機能をそのまま変数に代⼊ できる function hello() { return "Hello"

    } const greeting = hello; // 変数を代⼊している console.log(greeting()) // => Hello
  5. 下記のような式を関数式、名前のない関数の事を無名関数と呼び ます。 const greeting = function () { return "Hello,World"

    } // ES6からは下記のようなアロー関数を利⽤する。 const greeting2 = () => { return "Hello, World" } console.log(greeting()) // Hello, World
  6. 名前付き関数式 const recFunc = function named() { if (n ===

    0) { return 1; } // namedを再帰的に呼び出している return n * named(n - 1); } console.log(named(3)) // undefined console.log(recFunc(3)) // 6
  7. 下記のように記述します。 function ⾼階関数(コールバック関数の引数) { //処理 } const recFunc = function

    named() { if (n === 0) { return 1; } // namedを再帰的に呼び出している return n * named(n - 1); } // 何気なく前項で使⽤してきた”これ”のことです。 console.log(recFunc(3)) 上記の場合は、console.logがHOF(⾼階関数)。 recFuncがコールバック関数であり、⾃⾝を使うHOFです
  8. ブロックスコープ ES6から採⽤。 ※ブロックとは {} のこと 例1) // for⽂のブロックスコープを持つローカル変数 i を定義

    for (let i = 0; i < 3; i++) { console.log(i); // -> 0, 1, 2 } // for⽂のブロックスコープの外側からはアクセスできない console.log(i); // -> ReferenceError
  9. 例2) if (window) { let scope = 'local'; console.log(scope); //

    -> local } // ブロックスコープ外のためアクセス不可 console.log(scope); // -> ReferenceError
  10. 答え var arg = 1 function fn() { console.log(arg) //

    => undefined ナンデ!!!? var arg = 0 console.log(arg) // => 0 } fn()
  11. 即時関数 即時関数 とはjavascriptの関数式の⼀つで、 即座に実施される関数のことです。 下記のように記述します (function () { // なにか処理

    }()) スクリプト全体をこれで囲むことで変数のグローバル汚染を避け ることができます。 現在はより良い記法があるため、 今は使うけど最終的には使⽤しなくなるテクニック と覚えておいてください。
  12. varを利⽤しない ✘ var hoge = 1 ◦ const obj =

    {} // Objectや配列の場合は無条件でこっち let str = "" // ⽂字列や数字などで、再代⼊する場合はこっち。
  13. 変数のグローバル汚染を避ける ✘ var i = 0 var j = 0

    for (i = 0; i < something.length; i++) { } ◦ const loopFunc = function () { for (let i = 0; i < something.length; i++) { } }
  14. ◦ const sum = function (arg1, arg2) { return arg1

    + arg2 } const multiple = function (arg1, arg2) { return arg1 * arg2 } const myFuncArgs = { arg1: getArg1() // 引数を⽣成する関数を別途作ったと仮定 arg2: getArg2() // 引数を⽣成する関数を別途作ったと仮定 arg3: getArg3() // 引数を⽣成する関数を別途作ったと仮定 arg4: getArg4() // 引数を⽣成する関数を別途作ったと仮定 // 省略 } const myFunc = function (myFuncArgs) { const localSum = sum(myFuncArgs.arg1, myFuncArgs.arg2) const localMultiple = multiple(myFuncArgs.arg3, myFuncArgs.arg4) }