1

我已經定義了下面的一段下面的CoffeeScript代碼,其定義了一個函數使用RequireJS RequireJS,CoffeeScript的和顯露的模塊模式的:正確使用

define 'PersonService', ['jquery'] ($) -> 
    getPerson = (id) -> 
     person = dataService.GetPerson id 
    { getPerson: getPerson} 

它產生以下:

(function() { 

    define('PersonService', ['jquery'](function($) { 
    var getPerson; 
    getPerson = function(id) { 
     var person; 
     return person = dataService.GetPerson(id); 
    }; 
    return { 
     getPerson: getPerson 
    }; 
    })); 

}).call(this); 

我想我遇到的問題是從Coffeescript代碼生成的自執行功能。這是否會導致我可能無法跟蹤的問題?或者這是正確的。

謝謝。

回答

2

這是正確的

不具有包裹功能,並具有一個與範圍有關的區別。

如果你定義var a = 10;在全球範圍內,無論是否帶有關鍵字var,都會變得全球化。

當包裝所有變量都是本地的封裝函數,所以不要結束全局。

在你的例子中,一切都已經包裹在一個函數中,所以你不需要額外的包裝!

你可以告訴咖啡腳本不使用

coffee -b, --bare   compile without a top-level function wrapper 

恕我直言添加的包裝函數:最好是總是有包裝的功能,所以你不必去想它以文件的基礎文件。

+0

謝謝你的優秀答案 – RyanKeeter