関数定義式
式モードで定義された関数、関数名は任意
var functionName = function([arg1 [,arg2 [...,argn]]]){ statement; } var functionName = function funcName([arg1 [,arg2 [...,argn]]]){ statement; }
匿名関数(匿名関数)は、ラムダ関数とも呼ばれ、関数キーワードの後に識別子がない関数です
一般的には、式として定義された関数には名前が必要ないため、関数を定義するコードがよりコンパクトになります。関数定義式は、一度だけ使用される関数を定義するのに特に適しています
var tensquared = (function(x) {return x*x;}(10));
関数定義式には名前が含まれるため、関数のローカル スコープには関数オブジェクトにバインドされた名前が含まれます。実際、関数の名前は関数内のローカル変数になります
var test = function fn(){ return fn; } console.log(test);//fn(){return fn;} console.log(test());//fn(){return fn;} console.log(test()());//fn(){return fn;}
名前付き関数式の場合、関数名は関数オブジェクトの仮パラメータに相当し、変数名が関数内でのみ使用できます。関数オブジェクトと同等です 実際のパラメータは関数の内部と外部の両方で使用できます
var test = function fn(){ return fn === test; } console.log(test());//true console.log(test === fn);//ReferenceError: fn is not defined
関数は非標準の name 属性を定義します。この属性を通じて、指定された関数で指定された名前にアクセスできます。属性は常に function キーワードに続く値と等しくなります。次の識別子の場合、匿名関数の name 属性は空です
//IE11-浏览器无效,均输出undefined //chrome在处理匿名函数的name属性时有问题,会显示函数表达式的名字 function fn(){}; console.log(fn.name);//'fn' var fn = function(){}; console.log(fn.name);//'',在chrome浏览器中会显示'fn' var fn = function abc(){}; console.log(fn.name);//'abc'
関数コンストラクター
関数コンストラクターは任意の数のパラメーターを受け取りますが、最後のパラメーターは常に次のようにみなされます。関数本体、および前のパラメータが列挙されます 新しい関数のパラメータ
var functionName = new Function(['arg1' [,'arg2' [...,'argn']]],'statement;');
[注意] Function コンストラクターでは関数名を指定できません、匿名関数が作成されます
技術的には、これは関数式です。ただし、この構文ではコードが 2 回解析されるため、お勧めできません。 1 回目は通常の JavaScript コードを解析し、2 回目はコンストラクターに渡された文字列を解析し、パフォーマンスに影響します
var sum = new Function('num1','num2','return num1 + num2'); //等价于 var sum = function(num1,num2){ return num1+num2; }
Function() コンストラクターによって作成された関数、関数本体のコンパイルは常に実行されますグローバルスコープ内。したがって、Function() コンストラクターは、グローバル スコープで実行される eval() に似ています
var test = 0; function fn(){ var test = 1; return new Function('return test'); } console.log(fn()());//0
【注意】すべての関数がコンストラクターになれるわけではありません
var o = new Math.min();//Uncaught TypeError: Math.min is not a constructor
以上がJavaScript基本チュートリアルの式とコンストラクタの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。