ठीक है, मुझे नहीं पता कि इस प्रश्न के लिए शीर्षक को कैसे वाक्यांशित किया जाए।क्लोजर स्कोप कैद नहीं किया गया? - कॉफ़ीस्क्रिप्ट
openDir = (path) ->
socket.emit "get_metadata", path, (data) ->
columnBox = $ "<div/>", class: "columnbox"
for item in data.contents
itemBox = $ "<div/>", class: "itembox"
itemBox.click ->
columnBox_inner.children().removeClass "selected"
itemBox.addClass "selected" # <<<--- Over here
openDir item.path
columnBox.append itemBox
columnBox.appendTo "#columnscontainer"
मैं समझता हूँ कि चर itemBox
openDir
के दायरे में यहाँ परिभाषित किया गया है। लेकिन चूंकि इंगित लाइन एक लैम्ब्डा फ़ंक्शन में है, तो itemBox
नहीं होना चाहिए, इसके बाद संदर्भित अंतिम ऑब्जेक्ट में उत्परिवर्तित होने के बजाय मूल दायरे के itemBox
द्वारा संदर्भित ऑब्जेक्ट को कैप्चर करें?
इसे स्पष्ट रूप से रखने के लिए, मैं प्रत्येक के क्लिक हैंडलर को addClass "selected"
निष्पादित करने की अपेक्षा करता हूं। लेकिन क्या होता है कि प्रत्येक क्लिक हैंडलर में itemBox
हमेशा अंतिम आइटम बॉक्स का संदर्भ लेता है।
मैं आइटमबॉक्स को घोषित कहां बदलकर इसे आसानी से ठीक कर सकता हूं। अर्थात
data.contents.forEach (item) ->
में
for item in data.contents
बदल रहा लेकिन मैं जानना चाहता है कि लैम्ब्डा समारोह चर वर्तमान मूल्य पर कब्जा नहीं करता चाहते हैं।
प्रश्न 'openDir item.path' लाइन में संदर्भित' आइटम' चर पर भी लागू होता है, यहां तक कि 'ओपनडियर' के दायरे में भी परिभाषित किया जाता है। –