2013-11-03 5 views
6

मुझे पता है कि इस अनाम कार्योंयह घोषित करने के बाद एक नामित समारोह निष्पादित

(function toBeExecutedImmediately() { 
    // Code 
}()); 

मैं एक समारोह है कि मैं अन्य स्थानों में उपयोग करना चाहते हैं के लिए किया जा सकता है, लेकिन यह भी तुरंत निष्पादित किया जाना चाहिए। क्या के बजाय इसे एक कथन के साथ करना संभव है? वापसी मूल्य की आवश्यकता नहीं है।

function toBeExecutedImmediately() { 
    // Code 
}; 

toBeExecutedImmediately(); 
+3

पहला वाला अज्ञात फ़ंक्शन नहीं है। इसका नाम है – Joren

+0

आपने इसे हल किया है, आपको बस इसे आजमा देना है। – Theraot

+2

@wared: नहीं, नाम 'toBeExecutedImedimedi' नाम को उस दायरे में जोड़ा नहीं जाएगा, इसलिए यह कहीं और उपलब्ध नहीं होगा। –

उत्तर

4

यह बजाय एक बयान निम्नलिखित के साथ यह करने के लिए संभव है?

नहीं। यदि आप पाते हैं के रूप में, नामित समारोह अभिव्यक्ति (अपना पहला उदाहरण) broken engines   — पर मैं अपने आप को देख रहा हूँ, IE8 और पहले को छोड़कर युक्त गुंजाइश (करने के लिए नाम नहीं जोड़ता है), इसलिए आप इसे संभव बनाने के लिए कुछ और किए बिना फ़ंक्शन को कॉल नहीं कर सकते हैं, और निश्चित रूप से घोषणा (आपका दूसरा उदाहरण) के साथ, आपको नाम दो बार देना होगा।

आपकी सर्वश्रेष्ठ शर्त शायद आगे बढ़ने और घोषणा और अलग कॉल (आपका दूसरा उदाहरण) करने के लिए संभव है।

हम संभवत: कुछ ऐसे कथनों के साथ आ सकते हैं जो तकनीकी रूप से "एक कथन" की परिभाषा को पूरा करेंगे, लेकिन यह कम होने की संभावना नहीं है।

तो संक्षिप्तता अपने लक्ष्य है, यह दो कथन है, लेकिन संक्षिप्त है:

var f = function() { 
    // Code 
}, toBeExecutedImmediately = f; 
f(); 

लेकिन जब अपेक्षाकृत संक्षिप्त, मैं कहेंगे स्पष्टता भुगतना पड़ता है। :-)

बेशक, यदि आप एक सहायक कार्य जोड़ते हैं तो कुछ भी संभव है। उदाहरण के लिए:

// The helper 
function defineAndExecute(f) { 
    f(); 
    return f; 
} 

// using it 
var toBeExecutedImmediately = defineAndExecute(function() { 
    // Do work here 
}); 

समारोह तकनीकी रूप से गुमनाम है, लेकिन आप var के माध्यम से यह कह सकते हैं। (आप एक नामित समारोह अभिव्यक्ति यहाँ भी इस्तेमाल कर सकते हैं, लेकिन निश्चित रूप से उस लक्ष्य को हराने होगा   — नाम दोहराने नहीं   — मैं यह समझ के रूप में।)


साइड नोट: आपका पहला उदाहरण "एक नहीं है अनाम कार्य "। फ़ंक्शन का उचित नाम है, यह नाम फ़ंक्शन अभिव्यक्ति है। यह सिर्फ इतना है कि नामित फ़ंक्शन एक्सप्रेशन के साथ, फ़ंक्शन घोषणाओं के विपरीत, वह नाम उस दायरे में नहीं जोड़ा जाता है।

function DeclareAndExecute(name, func) { 
    window[name] = func; 
    func(); 
} 

उपयोग::

DeclareAndExecute("toBeExecutedImmediately", function() { 
    //code here 
}); 

Live test case

+0

मुझे * टूटे इंजन * भाग के बारे में पता नहीं था, यह दिलचस्प है! – xiankai

+0

@xiankai: हाँ, आईई 8 और पहले ** वास्तव में ** फ़ंक्शन एक्सप्रेशन गलत नाम दिया गया है, विवरण: http://blog.niftysnippets.org/2010/09/double-take.html वे वास्तव में अलग-अलग दो अलग-अलग फ़ंक्शन बनाते हैं बार। –

+0

यह एक अच्छा जवाब है। कृपया अपने दूसरे उदाहरण * में 'toBeExecutedImmediately' var' में अज्ञात फ़ंक्शन में एक नाम जोड़ें (वही नाम के समान, फ़ंक्शन घोषणा की तरह) *। –

1

आप "समारोह बिल्डर" इस ​​तरह की तरह लिख सकते हैं।

यह दिए गए नाम का उपयोग करके वैश्विक window स्कोप में फ़ंक्शन जोड़ देगा और इसे निष्पादित करेगा।

+1

अच्छा, यकीन है। ऐसा कुछ बनाना संभव है जो कार्य को वैश्विक रूप से भरोसा न करे। –

2

आप एक namespace इस्तेमाल कर सकते हैं: यहाँ

// alerts "say yes" 
(window.say = function (s) { alert('say ' + s); })('yes'); 
// alerts "say something" 
say('something'); 

टिप्पणी करने के लिए एक उत्तर के रूप में, कैसे समारोह स्थानीय बनाना है:

(function(){ 
    var dontSay; 
    // alerts "don't say no" 
    (dontSay = function (s) { alert('don\'t say ' + s); })('no'); 
    // alerts "don't say anything" 
    dontSay('anything'); 
})(); 

@JoeSimmons यह एक क्रांति वास्तव में नहीं है, लेकिन प्रश्न भी वास्तव में आवश्यक नहीं है; डी

+0

क्या होगा यदि आप वैश्विक फ़ंक्शन नहीं चाहते हैं? –

+0

@ जोइसिमन्स बस एक स्थानीय नेमस्पेस का उपयोग करें :) – leaf

+0

.... वास्तव में? जाहिर है, मैं उसे जानता हूँ। अगर मैं वैश्विक कार्य नहीं चाहता हूं तो क्या होगा। क्या होगा यदि मैं किसी अन्य फ़ंक्शन के दायरे में 'कहें' फ़ंक्शन को परिभाषित करना चाहता हूं? उस भाषा के अंदर से सुलभ होने के लिए कोई नामस्थान नहीं है। –

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

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