मैं इस तरह एक चर में एक पुनरावर्ती समारोह बना सकते हैं:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
इसके साथ, functionHolder(3);
आउटपुट होगा 3
2
1
0
। मान लीजिए कि मैंने निम्नलिखित कार्य किया:
var copyFunction = functionHolder;
copyFunction(3);
3
2
1
0
ऊपर के रूप में उत्पादन होगा । अगर मैं फिर functionHolder
निम्नानुसार बदल गया :
functionHolder = function(whatever) {
output("Stop counting!");
फिर उम्मीद के functionHolder(3);
मुताबिक देंगे Stop counting!
।
copyFunction(3);
अब 3
Stop counting!
जैसा कि यह संदर्भित करता है functionHolder
, न कि फ़ंक्शन (जो इसे स्वयं इंगित करता है)। यह कुछ परिस्थितियों में वांछनीय हो सकता है, लेकिन क्या फ़ंक्शन लिखने का एक तरीका है ताकि यह स्वयं को उस चर के बजाय कॉल करे जो इसे धारण करता है?
यही है, क्या केवल रेखा को बदलना संभव है functionHolder(counter-1);
ताकि इन सभी चरणों से गुजरना अभी भी 3
2
1
0
जब हम कॉल करते हैं copyFunction(3);
? मैंने कोशिश की this(counter-1);
लेकिन वह मुझे त्रुटि देता है this is not a function
।