發生了什麼事是這樣,下面的代碼:
fs.readFile('mydata.txt')(function (text) {
// Do something
console.log(text);
}, function (error) {
// Handle error
throw error
});
可以翻譯成這樣:
var file_reader = fs.readFile('mydata.txt');
file_reader(function (text) {
// Do something
console.log(text);
}, function (error) {
// Handle error
throw error
});
然後可以翻譯成這樣:
function read_file_handler (text) {
// Do something
console.log(text);
}
function file_error_handler (error) {
// Handle error
throw error
}
var file_reader = fs.readFile('mydata.txt');
file_reader(read_file_handler, file_error_handler);
基本上, JavaScript中允許你:
款待用作數據
立即使用任何表達或功能調用
數2是有趣的結果。因爲它可以讓你做這樣的事情:
function foo() {
return "a,b,c";
}
var abc_array = foo().split(',');
注意,在上面split
的例子是String
方法,但我們不能因爲它返回一個字符串foo()
後立即調用它。
同樣,我們可以做到這一點:
function foo() {
return function() {console.log('hello')}
}
foo()();
這裏呼籲foo()
返回的功能。我們可以將它分配給一個變量並調用它,但我們也可以像上面那樣立即調用它。
如果我的答案是不說清楚,你應該閱讀以下爲他在談論同樣的事情,更簡潔它MSCDEX的答案。 – QuietOmen 2014-09-11 02:29:15
我從[這裏](http://howtonode.org/control-flow-part-ii)博客條目的代碼。它是在談論節點舊諾基系統。我遵循你所說的話,直到函數被評估爲一些變量。我不明白的是該變量在哪裏被使用,以什麼名字存儲?在上面的例子中,'fs.readFile('mydata.txt')'的返回值是否會作爲參數傳遞給匿名函數? – kurofune 2014-09-11 02:50:02