1. 関数の定義と呼び出し
JavaScript では、関数を定義する最も一般的な方法は、関数ステートメントを呼び出すことです。ステートメントは、直後に続く function キーワードで構成されます。
Ø 関数名
Ø 括弧内のパラメーター リスト パラメーターはオプションであり、カンマで区切られます
Ø 中括弧で囲まれた関数本体
関数を使用するときに注意すべき点がいくつかあります。
Ø 関数本体に return ステートメントがある場合は値を返し、そうでない場合は未定義を返します。
Ø JavaScript は関数のパラメーターの数をチェックしません。は正しいです。仮パラメータよりも多くの実パラメータが渡された場合、超過した実パラメータは無視されません。渡されたパラメータの数よりも少ない場合、この場合、一般にエラーが割り当てられます。プログラムの実行時に発生します
]
実行中結果:
ddxkj
未定義
aaa
ccc
aaa
ccc
aaa
未定義
1.1。
JavaScript 1.2 および ECMAScript v3 では、関数定義を別の関数内に出現させることができます。これは関数のネストです。 ECMAScript v3 では、関数定義を任意に出現させることは許可されていないことに注意してください。関数定義は依然としてトップレベルのグローバル コードとトップレベルの関数コードに制限されています。つまり、関数定義はループや条件文には出現できません。例:
外部 Js を導入する必要がある場合は、更新して実行する必要があります
]
実行中結果:
10000
1.2. Function() コンストラクター
ECMAScript v1 および JavaScript 1.1 では、関数を動的に定義するために Function() と new を使用できます。例: var f = new Function("x", "y", "return x*y;");
このコード行は次とほぼ同等です: function f(x,y){return x*y ;}
Function() コンストラクターは、任意の数の文字列パラメーターを受け入れることができます。これには、ステートメントの各行を区切るために任意の JavasScrpt ステートメントを含めることができます。関数にパラメータがない場合は、関数本体の文字列だけで十分です。
Function() コンストラクターは、関数名が定義されていないため、匿名関数と呼ばれることもあります。
Function() コンストラクターの使用:
Ø 関数を動的に作成してコンパイルします。関数が呼び出されるたびに、Function() コンストラクターが関数をコンパイルする必要があるため、これが欠点となります。したがって、Function() コンストラクターは通常、ループや頻繁に呼び出される関数では使用されません。
Ø 関数をステートメントではなく JavaScript 式として定義します。ただし、JavaScript では、ステートメントではなく式で関数を定義する場合は、関数リテラルを使用する方が便利です。
1.3. 関数リテラル
関数リテラルの構文は、ステートメントではなく式として使用され、関数名を指定する必要がない点を除いて、関数ステートメントと非常によく似ています。 function ステートメントや Function() コンストラクターと同様、関数リテラルも関数を作成する方法の 1 つです。例:
Ø function f(x){return x*x;} //関数ステートメント
Ø var f = new Funtion("x","return x*x;"); ) コンストラクター
Ø var f = function(x){return x*x;};
関数リテラルは名前のない関数を作成しますが、呼び出しを記述するときに関数名を指定することもできます。 > それ自体 再帰関数は非常に便利です。例:
var f = function fat(x) { if (x 上記のコードは、名前のない関数を定義します。そしてその参照を f に保存します。これは、fact() 関数を作成するのではなく、関数本体がそれ自体を呼び出さずにこの名前を使用できるようにするだけです。
関数リテラルは、変数と同様に割り当てたり、関数に渡したり、直接呼び出すこともできます。例:
外部 Js を導入する必要がある場合は、<script>
//print1返回一个值
function print1(){
return 'ddxkj';
}
//print1没有return语句,返回undefined
function print2(){
}
function print3(str1,str2,str3){
document.write(str1,"<br>");
document.write(str2,"<br>");
document.write(str3,"<br>");
}
document.write(print1(),"<br>");
document.write(print2(),"<br>");
print3('aaa','bbb','ccc'); //实参和形参个数相同
print3('aaa','bbb','ccc','ddd','eee'); //实参个数多于形参
print3('aaa','bbb'); //实参个数小于形参
</script> を実行するために更新する必要があります]<script>
function print(a){
function square(x) {return x*x;}
document.write(square(a));
}
print(100);
</script>
运行结果:
100
25
2. 作为数据的函数
当函数被做为一种数据时,就可以像变量,被赋值、存储在对象属性或数组、传递给函数。
当以如下方式定义一个函数时,function square(x){return x*x;},定义了一个函数对象,并把这个函数对象赋值给了square。在这里square没有任何意义,不过只是一个对象而已,存储了函数对象。可以将这个函数赋值给其它变量。例如:
运行结果:
16
100
运行结果:
25
hello world
100