初めてのJavascript

Javascriptから逃げられなくなったので。
感覚掴むためにざっとパーフェクトJavascriptは読んで、その次にサイ本に手を出したけど半分も進んでないです。
そんな状態。

実行環境はbrew install nodeしたら入った気がした奴

ebifly # node -v
v0.10.26

やっぱり最初はHello Worldですね!

(function() {
    console.log("Hello, World");
})();

制御構文になれるにはFizzBuzzですね。

(function() {
    var eval = function(n) {
        switch(0) {
            case n % 15 : return "FizzBuzz";
            case n %  3 : return "Fizz";
            case n %  5 : return "Buzz";
            default     : return n;
        }
    };
    
    return function() {
        for(var i = 1;i <= 100; i++) {
        console.log(eval(i));
        }
    }();
})();

Javascriptっぽい書き方とかまだわからないし何か普通にやっても面白くないよね。
とか思いつつたいして面白い発想もできなかったらこうなるって感じのコードですね。

実行結果略

ここまでくればもう大丈夫な雰囲気がありますがせっかくのなので再帰も書きましょう。
みんな大好きフィボナッチ数列です。

(function() {
    function fib(n) {
      if(n === 1 || n === 2) {
          return 1;
      } else {
        return fib(n - 1) + fib(n - 2);          
      }
    };
    console.log(fib(10));
})();

クロージャの練習もします。

var counter = (function() {
    var n = 1;
    return {
        count : function() { return n++; } 
    };
}());

console.log(counter.count()); // 1
console.log(counter.count()); // 2
console.log(counter.count()); // 3

サイ本にあった0から9までの値を返す関数の配列を返す関数を想定通り動くようにしたの

function constfuncs() {
    var funcs = [];
    var set = function(n) {
        funcs[n] = function() { return n; };
    };
    for(var i = 0; i < 10; i++) {
      set(i);  
    }
    return funcs;
}

var funcs = constfuncs();

console.log(funcs[5]()); // 5

関数スコープが分かってれば元のがなんでダメかも自然と理解できるって感じ。

構文は正直今更アレコレウンウン唸る場面はあんまりないですが、
プロトタイプ絡みは慣れない事もあって怪しい部分がまだまだ多いです。
JavaScript: The Good PartsとかJavascriptパターンとの定番本をチラ見したけど面白そうなので早く到達できるようにしたい。