2011-11-30 175 views
2

我想知道javascript中的命名函數表達式,特別是節點。具有匹配變量名稱的命名函數表達式

是否有任何理由避免以下情況?

var foo = function foo() {}; 

我真的很喜歡使用函數表達式代碼組織,但我真的很喜歡堆棧跟蹤函數聲明。據我可以告訴上面的代碼工作,但它看起來不正確。

任何人都可以提供任何見解嗎?

ABE:我正在尋找你指定的函數與你指定的變量相同的實例。

函數聲明帶有額外的行李,您必須在使用之前定義內部函數,以避免jslint警告,因此您的代碼傾向於讀取最後一個,我不是一個粉絲。

爲了解決這個問題,你可以使用函數表達式,在頂部定義你的變量,然後按照它的運行順序或多或少地排列你的代碼。然而,走這條路線意味着你的功能都是匿名的,除非你命名它們。這使我們回到原來的問題。

我可以將一個函數聲明命名爲與變量本身相同的賦值給一個可變參數。

回答

0

var foo = function() {};

function foo() {};

兩個應該是可能的。結合他們不應該給你任何問題。

3

命名函數表達式在v8(因此節點)中工作,沒有問題。只是在舊版本的IE中,存在問題。

1

這就是區別:

// anonymous function expression 
var x = function(){}; 
console.log(x.name); // "" -> empty string 

// named function expression 
var x = function foo(){}; 
console.log(x.name); // "foo" 

// function statement (old thing with function 'hoisting' behavior) 
function foo(){}; 
console.log(foo.name); // "foo" 

你可以使用任何一種。 當你寫'Class'對象或類似的東西時,'Name'很方便。

-1

var foo = function foo() {};

是愚蠢的,因爲你可以做

function foo() {}

沒有理由在函數的聲明使用命名函數表達式。