2011-07-15 54 views
0

我的編程背景是我在學校學到了一點Java。由於某種原因,JavaScript語法會讓我困惑。下面的JavaScript代碼是語法的圖案,我不知道做什麼:JavaScript語法

foo.ready = function(variable){... var whatever = variable.bar(); 

我的一個混亂的要點是參數。作爲一個對比的例子,在Java,如果我調用一個參數的方法,該調用發送一個參數。我沒有看到名爲「變量」的參數是如何設置的。

+0

參數「變量」未在該代碼中設置。完整的代碼是什麼樣的? –

+1

該函數被分配給foo.ready,所以你可以這樣執行foo.ready('some value'); – house9

+0

需要注意的一件重要的事情是,Java和JavaScript幾乎完全無關,只要有趣的事情除了那些神奇的四個字母:-) – Pointy

回答

1

foo.ready被調用時,variable被分配,並且傳遞了一些值(可能是一個函數)。

var foo = {}; // 1. Create an object named "foo" 

    // 2. Assign a function to the "ready" property of "foo" 
foo.ready = function(variable) { 

     // 4. "foo.ready" has been invoked, and received a function to its 
     //   "variable" parameter, which it then invokes. 
     // The return value is assigned to "whatever" 
    var whatever = variable(); 

    alert(whatever); // 5. alert the value returned from the function 

}; 

    // 3. Invoke "foo.ready" passing a function as the argument. 
    //   The function merely returns a string 
foo.ready(function() { return "Hello world"; }); 

這裏的一個工作示例:http://jsfiddle.net/69grz/

+0

'.bar()'定義在哪裏? –

+0

@Jared:什麼酒吧? o)我剛更新了評論。同時擺脫酒吧。不過謝謝。 :O) – user113716

1

變量可以遠遠超過一個實際變量,它也可以是一個函數或一個處理程序/對象。在這種情況下,您可以在對象上調用函數bar()variable

1

foo.ready引用整個函數。您也可以使用任意數量的參數調用foo.ready()。這是一種典型的回撥模式:掌管foo對象的任何人想在您準備好後再打給您,以便將此功能傳遞給她。

您無法真正控制將多少個變量(任何類型的!)傳遞給您的函數,但據推測文檔會告訴您至少會收到一個變量。

1

下面是一些代碼,使得這項工作:

// foo is an object 
var foo = {}; 

// Create a function and assign to the ready property 
foo.ready = function(variable){ 
    var whatever = variable.bar(); 
}; 

// Create an object that contains a function named bar 
var x = { 
    bar: function(){ return 42; } 
}; 

// Call the function in foo with the object as parameter 
foo.ready(x); 

表達variable.bar()將調用功能,其中返回值的對象x42,然後將其分配給變量whatever