ホームページ > 記事 > ウェブフロントエンド > JavaScript 匿名関数はブロックレベルのscope_javascript スキルを模倣します
匿名関数
関数は JavaScript で最も柔軟なオブジェクトです。ここではその匿名関数の使用法のみを説明します。
匿名関数: 関数名のない関数です。
関数の定義では、まず関数の定義を簡単に紹介します。大きく分けて 3 つの方法があります
最初のタイプ: これも最も一般的なタイプです
function double(x){ return 2 * x; }
2 番目の方法: このメソッドは Function コンストラクターを使用し、パラメーター リストと関数本体の両方を文字列として扱います。これは非常に不便なので、お勧めできません。
var double = new Function('x', 'return 2 * x;');
3 番目のタイプ:
var double = function(x) { return 2* x; }
なお、「=」の右側の関数は関数作成後、変数 square に代入されます。
JavaScript にはブロックレベルのスコープという概念がありません。つまり、ブロックレベルのステートメントで定義された変数は、実際にはステートメント内ではなく、それを含む関数 (外部関数) 内で作成されます。
function outputNumber(count){ for(var i=0;i<1000;i++){ alert(i); } alert(i); //count }
Java や C# などの言語のこの関数では、変数 i は for ループ ステートメント内でのみ定義され、ループが終了すると i は破棄されます。しかし、JavaScript では、変数 i は、outputNumber() アクティビティ オブジェクトで定義されるため、定義されるとすぐに関数内でアクセスできます。同じ変数を再宣言しても値は変わりません。
function outputNumber(count){ for(var i=0;i<1000;i++){ alert(i); } var i; //重新声明变量 alert(i); //count }
匿名関数を使用すると、ブロックレベルのスコープを模倣し、この問題を回避できます。ブロックレベルのスコープ (プライベートスコープとも呼ばれます) として使用される匿名関数の構文は次のとおりです。
(function(){ //这是块级作用域 })()
一時的に変数が必要な場合は、プライベート スコープを使用できます。たとえば、
function outputNumber(count){ (function(){ for(var i=0;i<1000;i++){ alert(i); })(); alert(i); //导致一个错误 }