2016-09-04 9 views
1

私は、正規関数を名前空間で関数に変換しようとしています。これは通常の関数である:Javascriptでの名前空間の問題

surprise();  

function surprise() { 
    alert('TEST'); 
} 

、これは名前空間と同じ機能である:私は次のエラーを取得する

var namespace = {}; 

namespace.surprise(); 

namespace.surprise = function() { 
    alert('TEST'); 
}; 

+0

私のために働く[ここ](https://jsfiddle.net/h1hpdkb1/) – Li357

+0

jsフィドルでも私のために働いた。アンドリューは45秒で私を倒した。 >< – user2278120

+1

@AndrewL。私はちょうど私が上から関数を呼び出すことに気づいた。私はそれが問題だとは知らなかった?名前空間を持たない通常の関数の問題ではない – user6793397

答えて

0

関数が定義される前に、お電話の場合はUncaught TypeError: namespace.surprise is not a function、あなたTypeErrorが得られます。最初に関数を定義する必要があります。定義する前に、ネームスペースにはsurprise関数がなく、呼び出すとJavaScriptはあなたの話を知りません。 hereからだそれ

The function statement is magic and causes its identifier to be bound before anything in its code-block* is executed.

:ので

通常の機能を最初に定義する必要はありません理由があります。 functionfunctionキーワードで定義され、このような変数に格納されていないしなければならない。上記のように処理すべき

var myFunc = function() { 
    ... 
} 

。名前空間は関数を変数に格納するため、定義される前に関数を使用する能力を失います。