gpt4 book ai didi

javascript - NodeJS : function vs. 匿名函数

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:05 24 4
gpt4 key购买 nike

正在处理 stream-adventure NodeJS 教程,但我正在为双工器 redux 练习而苦苦挣扎。

这是我尝试使用的,但它不起作用:

var duplexer = require('duplexer2');
var through = require('through2').obj;

module.exports = function (counter) {
var counts = {};
var input = through(write, end);
return duplexer(input, counter);

var write = function (row, _, next) {
counts[row.country] = (counts[row.country] || 0) + 1;
next();
}

var end = function (done) {
counter.setCounts(counts);
done();
}
};

这是建议的解决方案,有效:

var duplexer = require('duplexer2');
var through = require('through2').obj;

module.exports = function (counter) {
var counts = {};
var input = through(write, end);
return duplexer(input, counter);

function write (row, _, next) {
counts[row.country] = (counts[row.country] || 0) + 1;
next();
}

function end (done) {
counter.setCounts(counts);
done();
}
};

有人可以帮助我理解使用保存到变量中的匿名函数与仅命名函数之间的区别吗?

最佳答案

区别是hoisting .当您使用函数声明语句(即建议的解决方案中使用的是什么)时,its definition is "hoisted"到包含它的范围(读取:函数)的顶部,因此即使您尝试在定义它的代码之前引用它,它仍然可用。

您正在使用变量赋值 来定义您的函数。这意味着 writevar write = 语句执行之前不会有值。您正在尝试在此之前使用它,当 write 仍然具有值 undefined 时。

这意味着您只需移动定义函数的位置就可以让您的代码正常工作:

module.exports = function (counter) {
var counts = {};
var write = function (row, _, next) {
counts[row.country] = (counts[row.country] || 0) + 1;
next();
};
var end = function (done) {
counter.setCounts(counts);
done();
};
var input = through(write, end);
return duplexer(input, counter);
};

注意不要将函数声明语句named function expressions混淆. 命名函数表达式是未提升的,就像匿名函数一样:

var boom = getNumber();
var getNumber = function getNumber() { return 3; };

关于javascript - NodeJS : function vs. 匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com