JSの関数
5454 ワード
関数の定義と呼び出し
前に、JSデータのタイプとオペレータの学習を通して、私達は正式に関数の学習を始めることができました.
ほとんどの内容は廖雪峰先生のJS教材で転載しています.
定義関数
JavaScriptでは、関数を定義する方法は以下の通りです. 関数内部のステートメントは実行時に
JavaScriptの関数もオブジェクトであるため、上記で定義された
したがって、2番目の定義関数の方式は以下の通りである.
上記の2つの定義は完全に等価であり、第2の方法は完全な文法に従って関数の最後に
関数を呼び出す
関数を呼び出すときは、順番にパラメータを入力すればいいです.
JavaScriptは、関数の内部でのみ機能し、現在の関数の使用者によってもたらされるすべてのパラメータを永遠に指す無料のキーワード
パラメータ
JavaScript関数は任意のパラメータを受信できるので、
ES 6標準は、restパラメータを導入しています.上記の関数は、次のように書き換えられます.
着信パラメータが正常に定義されているパラメータさえ満たされていないなら、大丈夫です.restパラメータは空の配列を受信します.
ES 6の新しいパラメータですので、ブラウザがサポートされているかどうかテストしてください.
あなたのreturn文に注意してください.
前に述べたJavaScriptエンジンは行末に自動的にセミコロンを追加するメカニズムがあります.これはreturn文の大きな穴に植えられます.
匿名関数とは、名前のない関数のことで、実際に開発されたものの使用頻度が非常に高いことを意味します.
まず、一般関数を宣言します.
廖雪峰のJS教程
前に、JSデータのタイプとオペレータの学習を通して、私達は正式に関数の学習を始めることができました.
ほとんどの内容は廖雪峰先生のJS教材で転載しています.
定義関数
JavaScriptでは、関数を定義する方法は以下の通りです.
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
上記abs()
の関数の定義は以下の通りである.function
は、これが関数定義であることを指摘する.abs
は関数の名前です.(x)
カッコ内に関数のパラメータがリストされ、複数のパラメータが,
で分離される.{ ... }
の間のコードは関数体であり、いくつかの語句を含んでいてもよく、ステートメントがなくても良い.return
に実行されると、関数は実行済みで、結果を返します.したがって,関数内部は条件判断とループにより非常に複雑な論理を実現できる.return
文がない場合は、関数は実行後に結果を返します.結果はundefined
です.JavaScriptの関数もオブジェクトであるため、上記で定義された
abs()
関数は実際には関数オブジェクトであり、関数名abs
は関数を指す変数と見なすことができる.したがって、2番目の定義関数の方式は以下の通りである.
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
このように、function (x) { ... }
は、関数名がない匿名関数である.しかし、この匿名関数の値は変数abs
に与えられているので、変数abs
を介して関数を呼び出すことができる.上記の2つの定義は完全に等価であり、第2の方法は完全な文法に従って関数の最後に
;
を追加する必要があり、割当文の最後を示す.関数を呼び出す
関数を呼び出すときは、順番にパラメータを入力すればいいです.
abs(10); // 10
abs(-9); // 9
JavaScriptは、呼び出しに影響を及ぼさずに任意のパラメータに入ることができるので、入力されたパラメータは定義されたパラメータよりも多くても大丈夫です.関数の内部にはこれらのパラメータが必要ではありません.abs(10, 'blablabla'); // 10
abs(-9, 'haha', 'hehe', null); // 9
着信パラメータは定義より少なくても大丈夫です.abs(); // NaN
このとき、abs(x)
関数のパラメータx
はundefined
を受信し、計算結果はNaN
である.undefined
を受信しないようにパラメータをチェックしても良いです.function abs(x) {
if (typeof x !== 'number') {
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
アーグメンントJavaScriptは、関数の内部でのみ機能し、現在の関数の使用者によってもたらされるすべてのパラメータを永遠に指す無料のキーワード
arguments
もある.arguments
はArray
と似ていますが、Array
ではありません.arguments
を利用して、调节者が入ってくるすべてのパラメータを得ることができます.つまり、関数がパラメータを定義しなくても、パラメータの値が得られます.function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0
abs(10); // 10
abs(-9); // 9
実際にはarguments
は、着信パラメータの数を判断するのに最も一般的である.このような書き方が見られます.// foo(a[, b], c)
// 2~3 ,b , 2 ,b null:
function foo(a, b, c) {
if (arguments.length === 2) {
// a b,c undefined
c = b; // b c
b = null; // b
}
// ...
}
中間パラメータb
を「オプション」パラメータに変更するには、arguments
で判断され、パラメータを再調整し、値を付与するしかない.パラメータ
JavaScript関数は任意のパラメータを受信できるので、
arguments
を使ってすべてのパラメータを取得しなければならない.function foo(a, b) {
var i, rest = [];
if (arguments.length > 2) {
for (i = 2; i
定義されたパラメータa
、b
以外のパラメータを取得するためには、arguments
を使用しなければならず、ループはインデックス2
から開始して、前の2つのパラメータを除外する必要があります.このような書き方は違和感があります.ただ、追加のrest
パラメータを得るために、より良い方法がありますか?ES 6標準は、restパラメータを導入しています.上記の関数は、次のように書き換えられます.
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// :
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
foo(1);
// :
// a = 1
// b = undefined
// Array []
restパラメータは最後にしか書けません.前は...
で識別されています.運転結果から、着信パラメータはa
、b
にバインディングされています.余分なパラメータは配列形式で変数rest
に渡しています.したがって、arguments
を必要とせずに、すべてのパラメータを取得しました.着信パラメータが正常に定義されているパラメータさえ満たされていないなら、大丈夫です.restパラメータは空の配列を受信します.
ES 6の新しいパラメータですので、ブラウザがサポートされているかどうかテストしてください.
あなたのreturn文に注意してください.
前に述べたJavaScriptエンジンは行末に自動的にセミコロンを追加するメカニズムがあります.これはreturn文の大きな穴に植えられます.
function foo() {
return { name: 'foo' };
}
foo(); // { name: 'foo' }
return文を2行に分解したら:function foo() {
return
{ name: 'foo' };
}
foo(); // undefined
注意したいのですが、JavaScriptエンジンは行末に自動的にセミコロンを追加する仕組みなので、上のコードは実際になっています.function foo() {
return; // , return undefined;
{ name: 'foo' }; //
}
正しい複数行の書き方は:function foo() {
return { // , {
name: 'foo'
};
}
匿名関数匿名関数とは、名前のない関数のことで、実際に開発されたものの使用頻度が非常に高いことを意味します.
undefined
には実際の名前の関数がありません.まず、一般関数を宣言します.
// , fn
function fn(){
console.log("hello");
}
//
// , , , !
function (){
console.log("hello");
}
ここで、匿名関数を単独で実行します.文法の要求に合わないので、エラーが発生しました.解決方法は、匿名関数に括弧を包むだけでいいです.//
(function (){
// , 。
console.log("hello");
})
匿名関数を実行する必要がある場合は、匿名関数の後に括弧を追加して直ちに実行します.(function (){
// hello
console.log("hello");
})()
値を送る必要がある場合は、直接に括弧内にパラメータを記入すればいいです.(function (str){
// hello world!
console.log("hello "+str);
})("world")
//
refer:廖雪峰のJS教程