2011-09-04 68 views
2

JavaScript如何處理名稱以()結尾的函數?例如,考慮下面的代碼段:以()結尾的函數名稱

var foo() = function() { }; // The empty function 

var bar = function(foo) { var myVariable = foo(); }; 

好像有什麼foo();意味着兩種可能的解釋:

  1. 執行參數foo。這爲foo分配myVariable返回的值。
  2. 考慮foo()作爲首先定義的函數的名稱。這賦予myVariable空功能。

這是甚至合法的代碼?如果是這樣,規則是什麼?

回答

5

這是甚至合法的代碼?

號:

var foo() = function() { }; 

應該是:

var foo = function() { }; 

如果是這樣,有什麼規則?

在這種情況下,因爲它是在一個範圍內比foo函數定義的foo參數將具有優先權。所以這確實是一個範圍問題:定義的變量在哪裏。解釋器首先通過查看代碼的最內層範圍,然後在外層,直到它到達全局範圍(窗口對象)。

因此,例如,下面的代碼的結果將是123所看到在這個live demo:「我可以通過功能引用」

var foo = function() { alert('we are in the foo function'); }; 
var bar = function(foo) { var myVariable = foo(); alert(myVariable); }; 
bar(function() { return 123; }); 
2

()不被視爲名稱的一部分。你可能會得到一個語法錯誤。你可以找到一些命名規則here

1

在javascript中,括號表示執行。所以你的代碼會失敗,因爲它會在第一行尋找一個函數foo。

0

標識符不能包含任何括號,因此第一條語句是非法的。然而,第二個沒有問題,myVariable = foo()執行foo參數並分配返回值。

0

你真正的意思如果是這樣,那麼答案是肯定的:

var foo = function() { return 2; } 
var bar = function(fn){ return fn(); } 

var two = bar(foo); 
+0

嘗試使用chrome的javascript控制檯或firebug – IanNorton

相關問題