2014-06-07 89 views
0

很久以前,我已經閱讀了很多關於javascript編碼約定的知識,而我想要決定的其中一件事是聲明函數的更好方法。我終於莫名其妙地堅持與應該返回函數的Javascript函數變成函數

var func_name = function(){}; 

版本,因爲它似乎在某些情況下很有用,但我是不是真的能找到的東西那就沒辦法了它們之間的相同的方式,直到如今。

我寫應該已經回到了新的功能在setTimeout的命令要使用的功能,但我不能讓它正常工作,在我的整個事情減小到這個測試代碼:

var test = new function(x) { 
    return function() { 
    if (x % 2 == 1) { 
     console.log('a'); 
    } 

    else { 
     console.log('b'); 
    } 

    x++; 
    }; 
}; 

我偶然嘗試,如果在

function func_name(){} 

寫作風格,這將有助於(因爲我真的看不到我的代碼問題),而有趣的是這個代碼

function test(x) { 
    return function() { 
    if (x % 2 == 1) { 
     console.log('a'); 
    } 

    else { 
     console.log('b'); 
    } 

    x++; 
    }; 
} 

似乎是完美的。 一個奇怪的事情發現是,在控制檯中玩了一下後,我意識到第一個實際上變成了它應該產生的功能。

我在Chrome和Firefox瀏覽器進行了測試過了,我用這種方式

var test = new function(x) { 
    var result = function() { 
    if (x % 2 == 1) { 
     console.log('a'); 
    } 

    else { 
     console.log('b'); 
    } 

    x++; 
    }; 

    return result; 
}; 

也試過,但我不能使它發揮作用。

我會對這種現象的任何解釋感興趣,而且如果有辦法使這種類型的函數聲明能夠產生函數,它會讓我着迷。

提前致謝!


編輯:我不知道怎麼回事,但不知是new關鍵字誤了那裏:d(甚至到由我的那個愚蠢的複製粘貼懶惰的第三個版本......) 我仍然對知道爲什麼函數變成它應該創建的東西感興趣!

+1

不要使用'new',只需使用'var test = function()...' – Barmar

+0

謝謝!!! 我不知道我怎麼可以忽略這個......(我不打算寫在那裏,我不知道XD是怎麼回事) 我仍然很想知道它爲什麼會變成它應該產生的東西雖然1 – Isti115

回答

2

你爲什麼用new?刪除它,它應該是好的國際海事組織。

您正在使用它,好像它是一個Construtor

雖然有效,但可以創建問題作爲您當前的問題。

+0

非常感謝!我不知道我怎麼可以忽略這個...(這有點像打字錯誤,我從來沒有搞錯過) – Isti115

+0

很高興幫助你:) –