ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript基本チュートリアルの式とコンストラクタの詳細な説明

JavaScript基本チュートリアルの式とコンストラクタの詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-25 10:05:281445ブラウズ

関数定義式

式モードで定義された関数、関数名は任意

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。