2017-02-04 32 views
32

Tất cả mọi thứ hoạt động tốt khi tôi đã viết logic js trong một đóng cửa như là một file js duy nhất, như:lỗi chưa gặp: (giá trị trung gian) (...) không phải là một chức năng

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

nhưng khi tôi cố gắng để chèn một chức năng thay thế đăng nhập trước đó đóng cửa trong file js cùng,

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) 

nó than phiền rằng có một Lỗi Loại:

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

Tôi đã làm gì sai?

Trả lời

84

Lỗi này là kết quả của sự chấm phẩy còn thiếu trên dòng thứ ba:

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

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

Đặc tả ECMAScript có specific rules for automatic semicolon insertion, tuy nhiên trong trường hợp này là một dấu chấm phẩy không được tự động chèn vào vì biểu thức mở ngoặc rằng bắt đầu vào dòng tiếp theo có thể được hiểu là một danh sách đối số cho một cuộc gọi hàm. Điều này có nghĩa là không có dấu chấm phẩy đó, hàm window.Glog ẩn danh đã được gọi với một hàm như tham số msg, tiếp theo là (window) sau đó đã cố gắng gọi bất kỳ thứ gì đã được trả về.

Đây là cách mã đã được giải thích:

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

nhờ giải thích của bạn Josh, và @mrlew, câu trả lời của bạn là hữu ích quá, không cần phải xóa mà :-) – armnotstrong

+4

@armnotstrong Josh là nhanh hơn, và câu trả lời là như nhau :) – mrlew

+1

Cảm ơn bạn quý ngài! Linter của tôi loại bỏ dấu chấm phẩy automagically và tất cả mọi thứ đã phá vỡ :) –

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

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

Output: Lỗi Loại: (giá trị trung gian) (giá trị trung gian) không phải là một chức năng

* Làm thế nào để Khắc phục sự cố ->vì bạn đang thiếu dấu chấm phẩy (;) để tách e biểu thức;

**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 
})(); 

Output: Lỗi Loại: (giá trị trung gian) (giá trị trung gian) không phải là một chức năng * Làm thế nào để Fix CNTT -> vì bạn đang thiếu colan bán (;) để biểu thức tách;

**Fixed** 


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

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

tại sao lỗi này xảy ra? Lý do: specific rules for automatic semicolon insertion which is given ES6 stanards

Các vấn đề liên quan