ホームページ  >  記事  >  ウェブフロントエンド  >  変数が関数である場合に注意すべき詳細の js の概要_javascript スキル

変数が関数である場合に注意すべき詳細の js の概要_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 17:57:481072ブラウズ

まず簡単なコードを見てみましょう:

コードをコピーします コードは次のとおりです:

var testFun=function ( name,age){
var job='Flash Develop';
return new testFun.init(name,age,job);
testFun.init= function(name,age,job) ){
return 'name:' 名前 ',age:' 年齢 ',job:' 仕事 '';
}
alert(testFun('vincent',30 )); //[object Object ]

変数 testFun は非常に単純で、匿名関数は testFun.init オブジェクト (これも匿名関数) を返します。しかし、一部の初心者は、testFun が返される te​​stFun.init オブジェクトであると誤解することがあります。彼は、匿名関数関数 (名前、年齢) の構築プロセス中に testFun が再び使用されたと考えているかもしれません。現時点では、testFun はまだ構築中であり、まだ存在していないはずです。

実際、この考え方には誤解があります。testFun が testFun() オブジェクトである場合、コードは testFun=function である必要があります。 (名前、年齢) {… …}()。正しく理解すると、testFun は単なる関数です。関数を代入した時点では、その関数が未定義または null を返したとしても、それ自体は testFun() が実行された後でのみ関数になります。値が未定義または null です。戻り値は testFun() の実行結果です。結果が返された後は、testFun とは何の関係もありません。例:

コードをコピー コードは次のとおりです:
var testFun=function() {
戻り値
}
var result=testFun();
alert(testFun); // 関数 () {return 未定義;}
alert(result);結果は testFun と異なります もう関係はありません

したがって、匿名関数が testFun に割り当てられると、別の値が割り当てられるまで、その関数は常に存在します。 testFun.init は次のように簡単に理解できます:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
まとめると、振り返ってみると、 testFun は関数であり、testFun() は (function(name,age,job){return 'name:' name ',age:' age ',job:' job ''; })()
の順です理解を容易にするために、コードは次のように簡略化できます。

コードをコピーします コードは次のとおりです:
var testFun=function(){}
testFun.init=function(){}

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