2017-02-04 10 views
32

सब कुछ ठीक काम करता है जब मैं एक एकल js फ़ाइल के रूप में बंद करने में js तर्क लिखा है, नहीं है:Uncaught TypeError: (मध्यवर्ती मूल्य) (...) एक समारोह

(function(win){ 
    //main logic here 
    win.expose1 = .... 
    win.expose2 = .... 
})(window) 

लेकिन जब मैं कोशिश एक ही js फ़ाइल में है कि बंद करने से पहले एक प्रवेश करने वैकल्पिक समारोह सम्मिलित करने के लिए,

window.Glog = function(msg){ 
    console.log(msg) 
} 
// this was added before the main closure. 

(function(win){ 
    //the former closure that contains the main javascript logic; 
})(window) 

यह शिकायत एक लेखन त्रुटि है कि वहाँ:

Uncaught TypeError: (intermediate value)(...) is not a function 

मैंने क्या गलत किया?

उत्तर

84

त्रुटि तीसरी पंक्ति में लापता अर्धविराम का परिणाम है:

window.Glog = function(msg) { 
    console.log(msg); 
}; // <--- Add this semicolon 

(function(win) { 
    // ... 
})(window); 

ECMAScript विनिर्देश specific rules for automatic semicolon insertion, हालांकि इस मामले में एक अर्धविराम स्वचालित रूप से डाला जाता है क्योंकि parenthesised अभिव्यक्ति है कि शुरू होता है अगली पंक्ति को फंक्शन कॉल के लिए तर्क सूची के रूप में व्याख्या किया जा सकता है।

इसका मतलब है कि कि अर्धविराम के बिना, अनाम window.Glog समारोह msg पैरामीटर के रूप में एक समारोह, (window) द्वारा पीछा किया जो बाद में आह्वान करने के लिए जो कुछ भी वापस आ गया था प्रयास किया गया था के साथ आमंत्रण को जा रहा था।

window.Glog = function(msg) { 
    console.log(msg); 
}(function(win) { 
    // ... 
})(window); 
+0

धन्यवाद अपने स्पष्टीकरण जोश, और @mrlew के लिए, आपका जवाब भी उपयोगी है, जोश @armnotstrong कि :-) – armnotstrong

+4

नष्ट करने के लिए कोई जरूरत तेजी से गया था, और इस सवाल का जवाब एक ही :) – mrlew

+1

धन्यवाद है महोदय! मेरे लिटर ने अर्धविराम से स्वचालित रूप से हटा दिया और सबकुछ टूट गया :) –

3
**Error Case:** 
var userListQuery = { 
      userId: { 
       $in: result 
      }, 
      "isCameraAdded": true 
     } 

     (cameraInfo.findtext != "") ? searchQuery : userListQuery; 

आउटपुट:: लेखन त्रुटि: (मध्यवर्ती मूल्य) (मध्यवर्ती मूल्य) एक समारोह

नहीं है * कैसे

इस तरह कोड व्याख्या की जा रही थी है आईटी ->को ठीक करने के लिए क्योंकि आप अर्ध कोलन (;) को अलग करने के लिए गायब हैं ई अभिव्यक्ति;

**Fixed** 
    var userListQuery = { 
      userId: { 
       $in: result 
      }, 
      "isCameraAdded": true 
     }; //(if miss that semi colan ..occurs error) 

     (cameraInfo.findtext != "") ? searchQuery : userListQuery; 
0
**Error Case:** 

var handler = function(parameters) { 
    console.log(parameters); 
} 

(function() {  //IIFE 
// some code 
})(); 

आउटपुट: लेखन त्रुटि: (मध्यवर्ती मूल्य) (मध्यवर्ती मूल्य) एक समारोह नहीं है * इसे ठीक करने के लिए कैसे -> आप अर्ध Colan याद कर रहे हैं क्योंकि, भाव अलग करने के लिए();

**Fixed** 


var handler = function(parameters) { 
    console.log(parameters); 
}; // <--- Add this semicolon(if you miss that semi colan .. 
    //error will occurs) 

(function() {  //IIFE 
// some code 
})(); 

यह त्रुटि क्यों आती है ?? कारण: specific rules for automatic semicolon insertion which is given ES6 stanards

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