ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの匿名関数とは何ですか?

JavaScriptの匿名関数とは何ですか?

php中世界最好的语言
php中世界最好的语言転載
2018-04-28 11:21:324110ブラウズ

この記事では、JavaScript の匿名関数について説明します。この記事を読んで、JavaScript の匿名関数の概念と使用法をある程度理解していただければ幸いです。

JavaScriptの匿名関数とは何ですか?

JavaScriptの匿名関数とは何ですか?

フロントエンドの面接では、面接官は基本的に匿名関数とは何か、クロージャ関数とは何かを尋ねます。

この記事では、まず匿名関数とは何かについて説明します。

名前が示すように、匿名関数は名前のない関数です。通常、私たちが書く関数は次のとおりです:

function do(){
  // 执行代码  
};
// 调用
do();

この書き方は、do という名前の関数を定義し、関数名を通じてそれを呼び出すことです。

名前がなかったらどうなるでしょうか?

function () {
   // 执行代码   
 };

この書き方ではコンパイル時にエラーが報告されます:

Uncaught SyntaxError: Unexpected token (

これはなぜですか?ブラウザが構文解析を実行すると、この関数はまったく実行できないことがわかります。

では、なぜ匿名関数が必要なのでしょうか?プログラミング言語に別のコーディング方法がある場合、そのコーディング方法は間違いなく正常に動作します。 では、どうすれば無名関数を実行できるでしょうか。次の例を見てください:

var do = function () {  // 执行代码  }do();

この種の関数は誰もが知っているはずです。実際、この記述方法は、匿名関数を変数 do にコピーし、変数名を使用して関数を実行することです。

(function(){   // 执行代码 
  console.log("打印成功");
})();

上記のコードは何を意味しますか?

まず、上記のコードをいくつかの部分に分割できます:

最初の部分は括弧内の匿名関数、2 番目の部分は括弧付きの匿名関数、そして 3 番目の部分には最終実行のための括弧があります。

括弧内の匿名関数は、匿名関数を変数として扱い、括弧内を介して実行されるとみなすことができます。

(function () {
   // 执行代码 
})();

// 相当于
var do = function() {
   // 执行代码  
};

do();

実際、上記の匿名関数の記述方法は、自己実行関数とも呼ばれます。JQuery などの一部のツールキットでは、この記述方法が使用されます。自己実行関数の利点は何ですか?

// 定义一个全局变量a
var a = 1;

(function() {
  // 在自执行函数中也创建一个变量a
  var a = 2;
   console.log(a);  // 2
})();

console.log(a); // 1

自己実行関数で出力される数値が 2 であるのに対し、自己実行関数で出力される数値は 1 であることがわかります

これはなぜでしょうか?

プログラム内にスコープという名前があるため、グローバル環境のスコープはグローバルスコープ、関数内のスコープは関数スコープと呼ばれ、スコープは階層化されており、内部スコープは外部スコープ スコープ内の変数ですが、内部スコープの変数には外部スコープからアクセスできません。

内部スコープ内の変数にアクセスする場合、まず自身のスコープ内で検索され、見つからない場合はさらに上位のスコープ内で検索されます。グローバルスコープ領域が見つかるまで。この階層間の関係はチェーンのようなものであるため、スコープ チェーンと呼ばれます。

上記のコードをもう一度見てください。自己実行関数では、console.log 関数が最初に独自のスコープ内で検索し、a 変数を見つけます。そのため、a の値は 2 として出力されます。グローバル環境では、log 関数も a 変数にアクセスします。外部スコープは内部スコープにアクセスできないため、グローバル環境でアクセスされた a 変数はグローバル関数環境でのみ検索できます。そのため、a の値が出力されます。 . 1;

概要: 自己実行 この関数の利点は、自己実行関数内の変数が他の環境によって汚染されないことです。

この記事は js チュートリアル コラムからのものです。学習へようこそ!

以上がJavaScriptの匿名関数とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。