javascriptをつかった実験。
print("hogehoge"); //=> hogehoge
これは問題ない。
a=1; function () { a=2; } print(a); //=> 1
関数の中のaは参照されないみたいだ。
階乗の計算(n!)
function func(n) { if (n==0){ return 1} else{ return n*func(n-1)} } print(func(7)) //=>5040
ここも、問題ない。
階乗の計算(末尾再帰)
function func(n) { function func_tail(a,b) { if(b==0){ return a } else{ return func_tail((a*b),(b-1)) } } func_tail(1,n) } print(func(7)); //=> undefined
なぜか「undefined」何でなんだろ。
何かがおかしい?
上との違いは、funcitonの中でfunctionを使っていること。
あと、javascriptで気づいたこと
javascriptは関数が評価される順序が違う。
function a(){ return "hoge" }; print(a()) //=>fuga function a(){ return "fuga" } print(a()) //=>fuga
rubyだと、"hoge"の後に"fuga"なのだけれど、
javascriptは違うみたい。
関数は一度格納してから、実行されるのかな?
長いコードを書いているとき、同じ名前の関数を作ってしまったらピンチ!かも。
ちょっとした違いで大きな差
さっきの関数a
print(a) //=>function a(){ //return "fuga" //} print(a()) //=>fuga
あれ、もしかして、変数aと関数aが結び付いている感じ?
調べてみる。これで結果が同じならそういうことかも
x=function(){ return "fuga" } print(x) //=>function(){ //return "fuga" //} print(x()) //=>fuga
あー、やっぱりおんなじだ。
なんか、記述の仕方はrubyと近いものがあるけど、
実装のされ方が結構違うかもしれない>javascript