2010-08-20 12 views
7

निम्नलिखित कोड में "फ़ंक्शन (i)" है, लेकिन "i" को इस कथन के पहले कहीं भी घोषित नहीं किया गया है।निम्नलिखित जावास्क्रिप्ट में "फ़ंक्शन (i)" में "i" क्या है?

ul.css({width: 10, overflow: 'visible'}).retarder(100, function(i){ 
    i.css('visibility', 'visible').animate(
     {width: ul[0].wid,left:-50}, 
     {duration: 500, complete : function(){ 
     ul.css('overflow', 'visible'); 
     }} 
    ); 
}); 

ऐसा लगता है कि यह एक सी ++ "यह" कथन के समान हो सकता है। क्या यह बिल्कुल सही है?

+1

यह एक तर्क के रूप में एक अज्ञात कार्य है। इस प्रकार मैं पहला तर्क है कि समारोह स्वीकार करता है। रिटार्डर विधि फ़ंक्शन को कॉल करती है, कॉलबैक (10, 11, 12), और इस प्रकार मैं एक मान प्रदान करता हूं। इस मामले में मैं = 10 और बाकी सब कुछ त्याग दिया जाता है। – srcspider

+0

वैसे, 'मैं' उस तर्क के लिए एक भयानक नाम है, इसे कुछ वर्णनात्मक –

उत्तर

4

i केवल एक फ़ंक्शन पैरामीटर है जो अज्ञात फ़ंक्शन पर retarder फ़ंक्शन द्वारा पारित किया गया है।

यह क्या करता है यह है:

ul.css({width: 10, overflow: 'visible'}).retarder(100, callback_function); 

और कॉलबैक गुमनाम समारोह के माध्यम से परिभाषित किया गया है:

function(i) { ... } 

ताकि i गुमनाम समारोह के पैरामीटर की परिभाषा है।

0

चर i वास्तविक वस्तु (कीवर्ड this की तरह) का प्रतिनिधित्व करता है


अधिक के बारे में बताएं:

1), एक गुमनाम समारोह के लिए एक पैरामीटर है के रूप में हम देख सकते हैं:

.retarder(100, function(i){...}) 

2) वर्तमान वस्तु का संदर्भ है (this)।

जब यह jQuery प्लगइन पूर्ण होने पर, यह कॉलबैक फ़ंक्शन को कॉल करने, का उपयोग करते हुए:

(callbackFunction)(this) 

जहां इस पैरामीटर है।

+0

में बदलें जैसा कि हर किसी ने उल्लेख किया है, यह एक अज्ञात फ़ंक्शन का पैरामीटर है। –

+0

बडी, हाँ, एक अज्ञात फ़ंक्शन के लिए पैरामीटर है ... लेकिन, इस मामले में, एक पैरामीटर है जो वास्तविक ऑब्जेक्ट = यह दर्शाता है। – Topera

+0

ओह, समझाने की देखभाल? – muhmuhten

1

अज्ञात फ़ंक्शन घोषणा समारोह (i) में वेरिएबल फ़ंक्शन बॉडी के अंदर पहले पैरामीटर के लिए उपयोग किया जाने वाला नाम है। यह आपके पृष्ठ में कहीं और किसी भी चर के अनुरूप नहीं है।

11

यह एक समारोह घोषणा की तरह दिखता है:

function(i) 
{ 
    // ..... 
} 

तो i एक मूल्य के समारोह में पारित किया जा रहा आंतरिक द्वारा अपनी पहली पैरामीटर के रूप में (जो एक गुमनाम समारोह के रूप में इनलाइन घोषित किया जा रहा है), शायद है retarder विधि की कार्यप्रणाली जिसमें आप फ़ंक्शन को पास कर रहे हैं।

फिर से लिख तो यह एक बिट अधिक पठनीय है कोड थोड़ा स्पष्ट इस बनाता है:

ul.css(
    { 
    width: 10, 
    overflow: 'visible' 
    } 
).retarder(100, function(i) 
    { 
    i.css('visibility', 'visible').animate(
     { 
     width: ul[0].wid, 
     left:-50 
     }, 
     { 
     duration: 500, 
     complete: function() 
      { 
      ul.css('overflow', 'visible'); 
      } 
     } 
    ); 
    } 
); 

और तुम तो फिर से लिखने यह भी स्पष्ट होना करने के लिए कर सकते हैं:

ul.css(
    { 
    width: 10, 
    overflow: 'visible' 
    } 
).retarder(100, functionToPassToRedtarder); 

function functionToPassToRetarder(i) 
{ 
    i.css('visibility', 'visible').animate(
    { 
     width: ul[0].wid, 
     left:-50 
    }, 
    { 
     duration: 500, 
     complete: functionToPassToComplete 
    } 
); 
} 

function functionToPassToComplete() 
{ 
    ul.css('overflow', 'visible'); 
} 
+6

उर्फ। एक 'तर्क' – aviraldg

+0

@Aviral, yeup, बिल्कुल, ... =) – Rob

7

यह एक फ़ंक्शन पैरामीटर है।

+0

डाउनवोट क्यों? जवाब निश्चित रूप से सही है, भले ही यह विस्तृत न हो। स्वयं को स्पष्ट करों। बेवकूफ डाउनवोट को सही करने के लिए –

+0

+1। डाउनवॉटर से लापता टिप्पणी के लिए – slebetman

+0

+1 अपरिवर्तित :-) –

5

यह एक अज्ञात फ़ंक्शन बनाता है जो एक ही तर्क लेता है, जिसे फ़ंक्शन में i के रूप में संदर्भित किया जाता है।

+1

यदि आप तकनीकी प्राप्त करना चाहते हैं, तो फ़ंक्शन * औपचारिक रूप से * एक पैरामीटर लेता है। निश्चित रूप से आप कई ** तर्क ** पास कर सकते हैं और उसी नाम के किसी ऑब्जेक्ट के माध्यम से उन्हें एक्सेस कर सकते हैं। – ChaosPandion

2

कारण आपको यह समझ में नहीं आ रहा है कि अगर आप जावास्क्रिप्ट में अज्ञात कार्यों के उपयोग से अपरिचित हैं। आप शायद की तरह कुछ के साथ परिचित हैं:

function double(i){ 
    return i + i; 
} 

i समारोह double के लिए एक पैरामीटर है। जावास्क्रिप्ट में, एक ही समारोह की तरह किया जा सकता है:

var double = function(i){ 
    return i + i; 
}; 

इस मामले में एक गुमनाम समारोह है बनाया और फिर एक चर double को सौंपा। i अभी भी एक पैरामीटर है। दोनों को double(3) कहा जा सकता है।

आपके द्वारा प्रदत्त उदाहरण में, अज्ञात फ़ंक्शन को एक चर में निर्दिष्ट करने के बजाय, इसे किसी अन्य फ़ंक्शन के लिए तर्क के रूप में पारित किया गया था।

1

आप समझ से परे कोड मुझे लगता है कि आप कर रहे हैं डिकोड करने के लिए कोशिश कर रहे हैं, तो आप शायद इस समारोह परिभाषा के लिए देख रहे हैं ...

$.fn.retarder = function(delay, method){ 
var node = this; 
if (node.length){ 
    if (node[0]._timer_) 
     clearTimeout(node[0]._timer_); 
    node[0]._timer_ = setTimeout(function(){ method(node); }, delay); 
} 
return this; }; 

मैं एक छोटे से गहरा यह पता लगाने के लिए है क्योंकि यह खुदाई करने के लिए किया था एक eval() के भीतर गतिशील रूप से उत्पन्न किया गया था।

तो अपने प्रश्न का उत्तर देने के लिए, "i" पैरामीटर "उल" ऑब्जेक्ट है (आपके द्वारा पोस्ट किए गए कोड में)।

यदि आप रिटार्डर फ़ंक्शन देखते हैं तो यह अधिकांश अन्य jquery प्लगइन्स की तरह "यह" देता है, इसलिए यह प्लगइन की श्रृंखला-क्षमता को बनाए रखता है।

मज़ेदार नहीं है?

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