我的編程背景是我在學校學到了一點Java。由於某種原因,JavaScript語法會讓我困惑。下面的JavaScript代碼是語法的圖案,我不知道做什麼:JavaScript語法
foo.ready = function(variable){... var whatever = variable.bar();
我的一個混亂的要點是參數。作爲一個對比的例子,在Java,如果我調用一個參數的方法,該調用發送一個參數。我沒有看到名爲「變量」的參數是如何設置的。
我的編程背景是我在學校學到了一點Java。由於某種原因,JavaScript語法會讓我困惑。下面的JavaScript代碼是語法的圖案,我不知道做什麼:JavaScript語法
foo.ready = function(variable){... var whatever = variable.bar();
我的一個混亂的要點是參數。作爲一個對比的例子,在Java,如果我調用一個參數的方法,該調用發送一個參數。我沒有看到名爲「變量」的參數是如何設置的。
當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/
'.bar()'定義在哪裏? –
@Jared:什麼酒吧? o)我剛更新了評論。同時擺脫酒吧。不過謝謝。 :O) – user113716
變量可以遠遠超過一個實際變量,它也可以是一個函數或一個處理程序/對象。在這種情況下,您可以在對象上調用函數bar()
variable
foo.ready
引用整個函數。您也可以使用任意數量的參數調用foo.ready()
。這是一種典型的回撥模式:掌管foo
對象的任何人想在您準備好後再打給您,以便將此功能傳遞給她。
您無法真正控制將多少個變量(任何類型的!)傳遞給您的函數,但據推測文檔會告訴您至少會收到一個變量。
下面是一些代碼,使得這項工作:
// 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()
將調用功能,其中返回值的對象x
42
,然後將其分配給變量whatever
。
參數「變量」未在該代碼中設置。完整的代碼是什麼樣的? –
該函數被分配給foo.ready,所以你可以這樣執行foo.ready('some value'); – house9
需要注意的一件重要的事情是,Java和JavaScript幾乎完全無關,只要有趣的事情除了那些神奇的四個字母:-) – Pointy