2013-10-29 7 views
18

में setTimeout() का उपयोग कैसे करें मैं अपने स्वयं के कार्यों में से किसी एक को कॉल करने के लिए setTimeout() का उपयोग नहीं कर सकता। मैं अलर्ट() को कॉल करने के लिए setTimeout का उपयोग कर सकता हूं, लेकिन एक ऐसा फ़ंक्शन नहीं जिसे मैंने स्वयं लिखा है।कॉफ़ीस्क्रिप्ट

मैं निम्नलिखित Coffeescript

setTimeout(run, 1000) 

    run =() -> 
     console.log("run was called!") 

निम्नलिखित में से कौन जावास्क्रिप्ट

// Generated by CoffeeScript 1.6.3 
    (function() { 
     var run; 

     setTimeout(run, 1000); 

     run = function() { 
     return console.log("run was called!"); 
     }; 

    }).call(this); 

कुछ नहीं उत्पन्न करता है कंसोल के लिए मुद्रित है: यहाँ सबसे सरल कोड है कि समस्या reproduces है।

+0

मैं coffeescript पता नहीं है, लेकिन अपने एक समारोह कॉल करने के लिए जहां आप बस होना चाहिए की कोशिश की तरह यह लग रहा है पैरामीटर प्रदान करने/आदि –

उत्तर

21
run =() -> 
    console.log("run was called!") 
setTimeout(run, 1000) 

आप कार्यों वाक्य रचना function run(){} साथ घोषित लिए javascript function hoisting पर निर्भर कर रहे हैं, लेकिन coffeescript उन्हें चर के रूप में घोषित करती है: var run = function(){} है, तो आप इससे पहले कि आप इसे संदर्भ समारोह को परिभाषित करने के लिए है, नहीं तो यह अभी भी undefined जब आप इसे करने के लिए पारित setTimeout

12

बेनामी विकल्प:

पीटर बिल्कुल सही है।

setTimeout -> 
    console.log 'run was called!' 
, 1000 

पैदावार:: लेकिन आप भी एक चर घोषित करने के बिना उपयोग कर सकते हैं setTimeout

(function() { 
    setTimeout(function() { 
     return console.log("run was called!") 
    }, 1e3) 
}).call(this); 
+0

कचरा संग्रह के बारे में कैसे? एक बार में संभव है? – nottinhill

+0

इस उत्तर में महत्वपूर्ण क्या है कि कॉफ़ीस्क्रिप्ट में 'console.log' कथन से पहले 4 रिक्त स्थान हैं। यदि केवल 2 रिक्त स्थान हैं, तो यह काम नहीं करेगा। कॉफ़ीस्क्रिप्ट में प्रत्येक टैब या 2 रिक्त स्थान एक स्तर को इंडेंट करते हैं। – gm2008

+0

एक पंक्ति पर: 'सेटटाइमआउट ((-> कुछ फ़ंक्शन()), 1000) ' –

संबंधित मुद्दे