2012-09-26 81 views
0

我有以下代碼:在另一個函數使用它之前,我是否必須定義一個js函數?如果它們都被包含在另一個函數中?

doAjax = function() { 
     $.ajax({ 
      cache: false, 
      url: url, 
      dataType: 'html' 
     }) 
     .done(onDone) 
     .fail(onFail) 
     .always(function() { 
      ; 
     }); 
    }, 
    onDone = function (data) { 
     content = data; 
     if (content.match(/^[eE]rror/)) { 
      mvcOnFailure(content); 
     } else { 

我收到包含「onDone」的JSLint說些錯誤的定義之前,它被使用。這是我應該儘量避免的,這是一個問題。請注意,doAjax和onDone函數都包含在另一個函數中。

+0

那是因爲你還沒有用'var'關鍵字聲明變量。 – undefined

+0

對不起,有一些代碼使用了var關鍵字。這些函數被聲明。 –

回答

2

如果你將它定義成:

function onDone() {} 

然後,你沒有你在同一範圍內使用它,因爲這樣所有的函數定義自動「懸掛」到的頂部之前定義它函數,並在該範圍內的任何代碼運行之前定義。

如果你將它定義成:

onDone = function() {} 

然後,直到該行代碼中的代碼執行的正常流程執行的JavaScript尊重你運行你的代碼,並onDone的順序沒有這個值您的函數,因此在調用任何使用onDone之前需要執行此行。

+0

我聲明所有的函數是這樣的變量:var x = function(){},var y = function(){}等等你是說如果我這樣做,我可能會遇到聲明?宣佈您建議的方式有什麼缺點嗎?謝謝 –

+0

@SamanthaJ - 我知道將它們聲明爲'function onDone(){}'沒有任何缺點。您不能將該表單用於方法分配,但適用於常規功能。 – jfriend00

+0

不好意思問這麼多問題。但是,你能解釋一下「你不能用這種形式進行方法分配」嗎?在我的代碼中,我使用onDone函數作爲我的ajax調用中的一個參數。這會是一個問題嗎? –

相關問題