2016-12-01 8 views
1

以下はすぐに実行され、完全に

var print = function(){ 
console.log('hey'); 
} 
$timeout(print(), 2200); 

タイムアウトを無視しますが、これは、私は機能が含まれている変数を使用することはできませんなぜ完全に罰金

$timeout(function(){console.log('hey')}, 2200); 

に動作しますか?

答えて

1

これは間違っています:

var print = function(){ 
console.log('hey'); 
} 
$timeout(print(), 2200); 

関数を渡すための正しい形式は次のとおりです。

var print = function(){ 
console.log('hey'); 
} 
$timeout(function(){ 
    print() 
}, 2200); 

$タイムアウトが最初の引数で関数を必要とするので。

あなたは$timeoutコンストラクタの最初の引数は、関数ではなく、関数の呼び出しであるAngular Doc

2

でこれを読むことができます。

$timeout(print, 2200);に変更し、それを、それはあなたがここに$timeoutサービスについての詳細を読むことができます罰金:)

を動作するはずです:https://docs.angularjs.org/api/ng/service/ $タイムアウト

希望に役立ちます!

+0

Upvoted、それは** **ソリューションを説明する唯一の答えです。 – Mistalis

1

のみを使用しprintここ

var print = function(){ 
    console.log('hey'); 
} 
$timeout(print, 2200); 

は、jQueryの機能を例に取り組んでいるsetTimeout()

var print = function(){ 
 
    console.log('hey'); 
 
} 
 
setTimeout(print, 2000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1
var print = function(){ 
console.log('hey'); 
} 
$timeout(print, 2200); 
0

$timeout(print, 2200);

それを修正する方法を示すいくつかの答えがすでに存在する機能

0

からparanthesisを削除しますが、あなたの質問に答えるために:私は機能が含まれている変数を使用することはできませんなぜ

を?

それはあなたができることですが、それはあなたがやっていることではありません。あなたはこのような関数を作成する場合:

var print = function(){ 
    console.log('hey'); 
} 

をあなたは機能を指すprintという名前の変数で終わります。あなたは今の関数としてそれを

  1. パス、それを二つのことを一緒に行うことができます
  2. JavaScriptですべての関数は常に返し、それを呼び出すと、それはありませんすぐに明らかにだが、それは結果

をだ取得結果。あなたの関数は、これに相当します:あなたはタイムアウトを使用しているとき

var print = function(){ 
    console.log('hey'); 
    return undefined; 
} 

は、だから、最初のパラメータとして機能を必要としています。 print()関数を呼び出すと結果(undefined)が得られるので、これはタイムアウト関数に必要なものではありません。

ので、復習に:

正しい

$timeout(print, 2200); // Pass the function as an argument 

誤った

$timeout(print(), 2200); // Pass the value undefined as an argument 
関連する問題