JSカスタム関数の宣言と呼び出しの詳細な分析

青灯夜游
リリース: 2022-08-04 09:13:26
転載
2081 人が閲覧しました

関数は、特定のタスクを実行し (特定の機能を持つ)、再利用できるコード ブロックのセットです。組み込み関数を使用するだけでなく、独自の関数 (カスタム関数) を作成し、必要に応じてその関数を呼び出すこともできるため、コードの繰り返しの記述を避けるだけでなく、後のコードのメンテナンスも容易になります。

JSカスタム関数の宣言と呼び出しの詳細な分析

#1: 関数を宣言するいくつかの方法

JavaScript でカスタム関数を宣言するには 3 つの方法があります。つまり、function ステートメントを使用することです。 Function() コンストラクターを使用し、関数リテラルを定義します。

1. Function ステートメント

JavaScript では、function ステートメントを使用して関数を宣言できます。具体的な使用法は次のとおりです。

function funName([args]) {
    statements
}
ログイン後にコピー

funName は関数名であり、変数名と同様に、有効な JavaScript 識別子である必要があります。関数名の後には、括弧で囲まれ、カンマで区切られたパラメータのリストが続きます。パラメータはオプションであり、数に制限はありません。

識別子として、パラメーターは関数本体内でのみアクセスされ、パラメーターは関数スコープのプライベート メンバーです。関数を呼び出すときは、関数に値を渡し、パラメータを使用して外部から渡された値を取得し、関数本体内で関数の実行に介入します。

括弧の後には中括弧があり、中括弧内に含まれるステートメントが関数本体構造の主な内容です。関数本体では中括弧が必須ですが、中括弧がないと JavaScript は構文エラーをスローします。

関数ステートメントには関数名、括弧、中括弧が含まれている必要があり、他のコードは省略できるため、最も単純な関数本体は空の関数です。

function funName() {}  //空函数
ログイン後にコピー

匿名関数を使用する場合、関数名は省略できます。

function () {}  //匿名空函数
ログイン後にコピー

var ステートメントと function ステートメントはどちらも宣言ステートメントであり、宣言された変数と関数は、変数プロモーションや関数プロモーションとも呼ばれる JavaScript のプリコンパイル中に解析されます。プリコンパイル期間中、JavaScript エンジンは各関数のコンテキストを作成し、変数オブジェクトを定義し、関数内のすべての仮パラメーター、プライベート変数、および入れ子関数を変数オブジェクトの属性として登録します。


#2. Function() コンストラクター

Function() コンストラクターを使用して、関数をすばやく生成します。具体的な使い方は以下の通りです。

var funName = new Function(p1, p2, ..., pn, body);
ログイン後にコピー

Function()のパラメータの型は全て文字列、p1~pnは作成した関数のパラメータ名のリスト、bodyは作成した関数の関数構造文、その間は本体ステートメントはセミコロンで区切ります。

例 1

すべてのパラメーターを省略し、関数本体を表す文字列のみを渡すことができます。

var f = new Function ("a", "b", "return a+b");  //通过构造函数来克隆函数结构
ログイン後にコピー

上記のコードでは、f は作成された関数の名前です。同じ関数を定義し、同じ構造の関数を function ステートメントを使用して設計できます。

function f(a, b) {  //使用function语句定义函数结构
    return a + b;
}
ログイン後にコピー

例 2

Function() コンストラクターを使用して、パラメーターを指定せずに空の関数構造を作成します。

var f = new Function();  //定义空函数
ログイン後にコピー

Function() コンストラクターを使用して関数を動的に作成します。ユーザーは、関数ステートメントで事前に宣言された関数本体に制限されません。 Function() コンストラクターを使用すると、関数を構造体としてではなく式として使用できるため、より柔軟に使用できます。欠点は、Function() コンストラクターが実行中にコンパイルされるため、実行効率が非常に低く、通常はその使用が推奨されないことです。

3. 匿名関数 (関数リテラル)

関数リテラルは匿名関数とも呼ばれ、関数には関数名がありません。関数キーワード、パラメータ、関数本体のみが含まれます。具体的な使用法は次のとおりです。

function ([args]) {
    statements
}
ログイン後にコピー

例 1

次のコードは関数リテラルを定義します。

function (a, b) {  //函数直接量
    return a + b;
}
ログイン後にコピー

上記のコードでは、関数リテラルは基本的に関数ステートメントを使用して関数構造を定義するのと同じであり、その構造は固定されています。ただし、関数リテラルは関数名を指定せず、関数の構造をキーワード function で直接表現したものであり、このような関数を無名関数とも呼びます。

例 2

匿名関数は式、つまり関数式であり、関数構造のステートメントではありません。次に、無名関数を値として変数 f に代入します。

//把函数作为一个值直接赋值给变量 f
var f = function (a, b) {
    return a + b;
};
ログイン後にコピー

関数構造体が値として変数に割り当てられている場合、変数は関数として呼び出すことができ、変数は無名関数を指します。

console.log(f(1,2));  //返回值3
ログイン後にコピー

JSカスタム関数の宣言と呼び出しの詳細な分析

例 3

匿名関数は値として機能し、より複雑な式の操作に参加できます。上記の例では、次のコードを使用して、関数の定義と呼び出しの統合操作を完了できます。

console.log(  //把函数作为一个操作数进行调用
    (function (a,b) {
        return a + b;
    })(1, 2));  //返回数值3
ログイン後にコピー

JSカスタム関数の宣言と呼び出しの詳細な分析

4. アロー関数

アロー関数は、es6 の関数の略称です。アロー関数自体の this は持たず、定義時に this が決定され、その値は前の層の this になります。

//箭头函数
const sayName = ()=>{
    console.log("箭头函数")
}
ログイン後にコピー

二:调用函数

一旦定义好了一个函数,我们就可以在当前文档的任意位置来调用它。调用函数非常简单,只需要函数名后面加上一个括号即可,例如 alert()、write()。注意,如果在定义函数时函数名后面的括号中指定了参数,那么在调用函数时也需要在括号中提供对应的参数。

示例代码如下:

function sayHello(name){
    document.write("Hello " + name);
}
// 调用 sayHello() 函数
sayHello('PHP中文网');
ログイン後にコピー

JSカスタム関数の宣言と呼び出しの詳細な分析

提示:JavaScript 对于大小写敏感,所以在定义函数时 function 关键字一定要使用小写,而且调用函数时必须使用与声明时相同的大小写来调用函数。

【相关推荐:javascript学习教程

以上がJSカスタム関数の宣言と呼び出しの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:biancheng.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!