मैं एक जावास्क्रिप्ट फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूंजब मैं उस जावास्क्रिप्ट कार्य को रेल एसेट पाइप लाइन मेनिफेस्ट के भीतर डाल देता हूं, तो क्रोम कंसोल। यहां मैं एक सरल रेल 4.2.4 ऐप बनाने और सेटअप करने के लिए कदम उठा रहा हूं
$ rails new JavascriptExample
$ cd JavascriptExample
$ rails g scaffold Bear name:string
$ rake db:migrate
मैं तो संपादित करता हूं app/assets/javascripts/bears.coffee
और एक कंसोल लॉग और एक फंक्शन जोड़ें।
console.log("asset pipeline sucks")
square = (x) -> x * x
फिर मैंने सर्वर को आग लगा दी
$ rails s
मैं यात्रा localhost:3000/bears
और क्रोम कंसोल में मैं देखता हूं कि मेरी पहली पंक्ति ने काम किया है। हालांकि जब मैं कमांड का प्रयास करता हूं square(5);
कंसोल में मुझे एक त्रुटि प्राप्त होती है Uncaught ReferenceError: square is not defined(…)
जब यह फ़ंक्शन स्पष्ट रूप से लोड किया जाता है तो मैं इसे इस तरह क्यों नहीं कर सकता application.js
?
उत्तर:
उत्तर № 1 के लिए 1यह वही है जो आपके कॉफ़ीस्क्रिप्ट को जावास्क्रिप्ट के लिए संकलित किया गया था
(function() {
var square;
console.log("asset pipeline sucks");
square = function(x) {
return x * x;
};
}).call(this);
से इस: the var keyword is reserved in CoffeeScript, and will trigger a syntax error if used. Local variables are created implicitly by default
, इसलिए यह आपकी अपेक्षा के अनुसार वैश्विक दायरे में उपलब्ध नहीं है
इसे काम करने के लिए, हम इसके बजाय कुछ ऐसा कर सकते हैं:
console.log("asset pipeline sucks")
@square = (x) -> x * x
ध्यान दें कि हमारे पास है @
और अब संकलित जावास्क्रिप्ट होगी:
(function() {
console.log("asset pipeline sucks");
this.square = function(x) {
return x * x;
};
}).call(this);