JavaScript学習ノート--Function
6007 ワード
JSの関数、継承、閉鎖、作用ドメインチェーン.いつも硬伤です.このような问题にぶつかると头が大きくなります.でも、続けて言ったら、「できません.本当に助かります.」私の辞書にはこの言葉がないので、雄叫びをあげます.ちょうど昨日本城でJSの紅宝の本を読みましたが、まだ読み終わっていません.
Function-関数はJSで2つの使用方法があります.
(1)関数宣言:宣言と呼び出しには厳密な順序がない
Function-関数はJSで2つの使用方法があります.
(1)関数宣言:宣言と呼び出しには厳密な順序がない
1 Greet(); //executed correctly. there is not the strict order between declaration and invoking
2 //a standard statement of a function
3 function Greet (name) {
4 alert("Hello, " + (name || "JS"));
5 }
(2)関数式: 声明と呼び出しには順序があります.1 //myFun(); //Wrong: Uncaught TypeError: Property 'myFun' of object [object Object] is not a function
2 //another statement: function expression
3 var myFun = function(name){
4 alert("Hello, " + (name || "JS"));
5 }
6 //like a variable, need to be declared firstly
7 myFun("Tom");
他の区分は覚えていませんが、後で娘さんに聞いてみます.現在は関数を使って階乗の再帰的実現を示しています.1 function factorial (num) {
2 if(num == 1)
3 return 1;
4 else
5 return num * factorial(num-1);
6 }
7 alert(factorial(5)); // 120 - OK
正常な使用.ただし、JSではFunctionも対象であり、一般変数のように使用できます.具体的には関数の入り口の指針を指しています.依頼と似ています.不利には、関数全体の定義を目標変数に割り当てます.1 //used as a variable
2 var fact = factorial;
3 alert(fact(5)); // 120 - OK
しかし、これは再帰的な実現であり、再帰的には繰り返し自身を呼び出すことである.上の使い方は、関数の実現過程を変数に委託して実行します.しかし、関数の中で自身の関数を呼び出しても元の関数に向かっています.この場合、元の関数を変更すると、結果は大きく変わります.1 factorial = function(){return 1};
2 alert(fact(5)); //5 - effected by the original function
これは厳密ではないBugです.再帰的には、関数自体をアーグメンント.1 // - correct usage
2 function factorial (num) {
3 if(num == 1)
4 return 1;
5 else
6 return num * arguments.callee(num-1);
7 }
もう一つの使い方があります.1 // mark
2 var myFactorial = (function f (num) {
3 if(num == 1)
4 return 1;
5 else
6 return num * f(num-1);
7 });
8 alert(myFactorial(5)); // 120
このような文法は見たことがありません.Mark.