0

私はしばらくの間このようなことをしてきましたが、エラーを見たことはありません。しかし、残念ながら、これが機能する理由を説明することはできませんでした。

最初の行は、関数を指す変数を作成します。2 行目は、ドットで区切って func2to を追加し、関数を定義するだけです。func1

varの前にa を追加するとfunc1.func2、コンパイル エラーが表示されます。

func1.func2 = function(){};

エラー

SyntaxError: missing ; before statement

var func1.func2 = function(){};

func1最初の行 1 ではどの型で、行 2 ではどのような型になったのか。

var func1 = function(){};
func1.func2 = function(){};
4

4 に答える 4

2

変数ステートメントの 1 つの形式は次のとおりです。

var identifier [optional assignment];

変数ステートメントの識別子は、識別子名の規則を満たす必要があります。その規則の1 つは、"." を含めることはできません。キャラクター。そう:

var func1 [...]; 

大丈夫ですが:

var func1.func2 [...]; 

ではありません。インタプリタは識別子で停止します。これは構文エラーであり、それだけです。代入を続行できません。

于 2013-11-11T22:44:34.863 に答える
1

func1両方の行の関数です。これは、次を使用して確認できますtypeof

var func1 = function(){};
typeof func1; // "function"
func1.func2 = function(){};
typeof func1; // "function"
于 2013-11-11T22:30:32.847 に答える
1

JavaScript の関数もオブジェクトであり、プロパティを持つことができます:

function func1(){} // a function object
console.log(func1.name); //=> "func1"

無名関数には名前がありませんが、関数オブジェクトであるため、次のようになります。

最初の行 1 の func1 はどの型で、2 行目でどうなったか。

func2別の無名関数を含むプロパティを持つ関数です。

于 2013-11-11T22:31:57.710 に答える
1
func1.func2 = function(){};

が定義されていない場合は、例外がスローされる原因となるfunc1プロパティにアクセスしようとしています。undefined

var func1.func2 = function(){};
// SyntaxError: Unexpected token .

JavaScript 構文では変数名にドットを挿入できないため、インタープリターは構文エラー エラーを返します。

var func1 = function(){};
func1.func2 = function(){};

JavaScript の関数は Function オブジェクトです。したがって、すべての JavaScript オブジェクトと同様に、実行時にメソッドを動的に追加できます。関数func1オブジェクトも同様で、func2別の関数オブジェクトです。これは、あなたがやろうとしていることを達成するための正しい方法です。

于 2013-11-11T22:44:49.303 に答える