发生了什么事是这样,下面的代码:
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