JS:JSの一般的な「関数の名前は関数ではありません」というエラー

なキャッチされない例外TypeErrorなどの一般的なエラーを、JS:xは関数ではありません

関数自体を除く理由は間違っている、非常に奇妙な状況があります:関数自体は間違っていないですが、実行されているが正しく機能していません。この場合、関連する特性には、JavaScript優先順位の変数と関数宣言を前に。

要約:

何があっ位置宣言セクション、全体のJSコードの始まりとなります事前に宣言文のJSフロント、関数や変数があります。

優先してのJS関数宣言は、どんな順序、同じ名前の変数を宣言しないように。

関数宣言にかかわらずどの位置JSの関数()関数の全体JSコードの前であろう。

ヘッドは)(Xという関数を宣言し、あなたがするvar Xという名前の変数を宣言するときに、変数名は同じ名前の変数定義した後、関数が未定義になりそうという、機能を上書きします、変数の定義と同じ名前を与えられた後、同じ関数を呼び出していますその  xは関数ではありません。

同じ名前が一緒に同じ名前の2つの変数との二つの機能を定義する場合は、4つの同量の名前は、次いで後者は、定義された量の後に相当する量(関数/変数)と最後の4つ前の機能または変数を上書きしますこの基準量で、タイプ(変数/関数)最終タイプの量(変数/関数)場合、この名前の定義された量。

 

次のように4点1について説明します。

まず、コードを見て:

console.log(X)
console.log(X())。
VAR X = 1 関数X(){
    console.log( 5 )。
}
console.log(X)
console.log(X()); // この時点では、変数xになり

出力:

関数x(){
                にconsole.log(5)。
 }

5

1
 キャッチされない例外TypeError:Xは関数ではありません

 ----------------------------

宣言フェーズ初期化段階、実施段階を:説明するための実行コンテキストの時に3つの段階に分割されているインタプリタJS。

JSのコンテキストでは、第一段階が宣言され、文ステージは事前宣言することを特徴とする、宣言は、変数含まれる宣言、関数宣言事前プレ上記のコードの出力を考慮し、我々が描くことができ、関数宣言フロント優先度を前の変数宣言では特性、および変数と関数名の競合は、変数の宣言を無視した場合、そのためのステートメント繰り返すことはしませんハエ変数や関数名を宣言最初の出力が関数である理由もうまく説明することがあり、ではなく未定義。これらの特性によれば、我々は以下のコードに解析することができる上記JS。

// 宣言位相
関数 X(){ // 関数宣言 
    はconsole.log(5。 )。
        }
varが X; // 変数の宣言を、xが宣言されており、ここで宣言されていないので(無視) 
// 実装フェーズ
はconsole.log(X)を、
console.log(X())。
X = 1 
console.log(X)。
console.log(X())。

上記のコードは、コードを実行し、変数と関数宣言フロントJS、および。

  • 第二の出力段宣言は、xと呼ばれる関数、実施段階における呼Xの関数に、関数本体の内容を実行すると宣言されているため、場合。
  • ときに第3の出力、出力1、xが値1を割り当てられているため。
  • 場合第4の出力は、この時点でxは変数ではなく関数であるので、それはJS「変数()」は、Aフォーマットを説明できない、それは「xが関数でない」プロンプトが表示されます。

次のように点5について説明する:同じ名前が一緒に同じ名前の2つの変数との二つの機能を定義するときは、4つの同量の名前は、次いで後者は、関数または前者に対応する可変量(関数/変数)を上書きします。

JSの素敵は、JSコードは、同じ名前の関数や変数と同じ名前を持つ場合、変数や関数名は、文を繰り返されることはありません、次のコードを実行するためにどのようにプログラムを宣言しました。

console.log(X)
console.log(X())。
 X = 1  X = 100 関数X(){
console.log( 5 )。
}
関数X(){
console.log( 500 )。
}
console.log(X)
console.log(X()); // 今回は、xとなり

分析的特性jsのコードは、コードは次のように解析されます。

// 宣言位相
関数 X(){ // 関数宣言
// はconsole.log(5); 文章文コードは下に覆われている 
にconsole.log(500 )。
}
varが X; // 変数の宣言を、xが宣言されており、ここで宣言されていないので(無視)
// 実装フェーズ
はconsole.log(X)を、
console.log(X())。
X = 1 
X = 100; // xの値により覆われている
にconsole.log(X)。
console.log(X()); // この時点では、変数xになり

だから、結果が出力されます。

関数x(){
                にconsole.log(500)。
 }

500

100
 キャッチされない例外TypeError:xは関数ではありません

----------------------------

だから、:あなたは、同じ名前の関数を宣言すると値後者によってカバーされる同じ名前の変数を宣言し、後者の定義が上書きされます

 

おすすめ

転載: www.cnblogs.com/forforever/p/12374589.html