我需要從一個函數中獲取它的名字(實際上我用.caller稍微上了一層,但不應該改變問題)。從var定義的函數中獲取名字
'arguments.callee.name'將解決我的問題,如果我的功能已被命名。但我的函數聲明爲var myFunc = function(){},並且改變這是不可能的(我使用總是編譯爲var聲明的CoffeeScript)。
那麼我怎樣才能得到該函數分配的變量?
這是爲了調試目的,所以我不擔心性能,我會使用任何操作讓我的名字,無論處理/時間成本。
編輯:根據記錄,這是我在CoffeeScript中實現了基於所選答案的建議庫:
window.log = (msg) ->
caller = printStackTrace()[4]
caller = caller.substring 0, caller.indexOf('(') - 1
if typeof msg is 'object'
console.log "v --- at #{ caller }: ---"
console.log msg
else console.log "> --- at #{ caller }: " + msg
工程就像一個魅力,謝謝大家!
就在調用點之前對代碼進行分析的缺點我不認爲這是可能的。 –
那麼,這些函數沒有名稱,這就是爲什麼他們被稱爲「匿名函數」。 –
現代瀏覽器JS調試器做到這一點(比較堆棧跟蹤與Chrome中的匿名函數來說IE7),但他們有更多的上下文可以離開。 –