我該如何告訴閉包編譯器一個匿名函數不應該作爲死代碼去除?我不想將該函數存儲到窗口對象。我正在尋找替代技術。是否有可能將匿名函數標記爲「Live Code」,以便Closure編譯器不會將其刪除?
說我有一個JavaScript文件,其中包含一個巨大的匿名函數。
(function(){return "I am here!"})
有關使用方法,我通過AJAX下載這個功能,然後捕獲的eval使用的東西輸出像
var f = eval('(function(){return "I am here!"})');
這在分配變量f匿名函數。
d8> var f = eval('(function(){return "I am here!"})');
d8> f
function(){return "I am here!"}
d8> f()
I am here!
當我通過包含單個大型匿名函數的js文件運行編譯器時,編譯器通過不輸出任何內容來「優化」我的代碼。這顯然不是我想要的。是否有某種JSDoc我可以把我的函數上面標記爲不是死代碼?
~~~~~~~~~~~~~~~~~~~~~~~~
解決方法:(這是不是真的是我想要的,但它似乎是有可用的工具)的最好成績
~~~~~~~~~~~~~~~~~~~~~~~~
我結束了使用的約翰和大衛的組合回答:
// code would be provided from an ajax request
var code = 'function F(){return "I am here!"};'
code = "("+code.replace(/\s*\;\s*$/, "")+");"
f = eval(code);
給函數一個名字使得Closure編譯器很開心。
根據函數的不同,閉包編譯器會定義函數以外的變量,所以我將代碼包裝在括號中以避免定義全局變量。
replace方法只是移動最後一個用於分隔函數定義的分號,以便它不會導致語法錯誤。
沒有函數包裝器,函數塊內部的代碼是無效的,所以它不會編譯。編譯器與JSC_PARSE_ERROR – user319862
扼流器呃,它是如何無效?你可以發佈代碼嗎?否則,嘗試立即執行函數包裝器,並仍然按照我的建議 – david
重新包裝它,即使簡單的「我在這裏」代碼也是無效的,除非包含在函數中,因爲返回語句:SyntaxError:非法返回語句 – user319862