【发布时间】:2018-08-15 03:41:40
【问题描述】:
我编写了一些正在运行的代码,我的下一场战斗是重构,我认为在范围方面我做错了一些事情。我正在检索消息数据并尝试对其进行修改:
function handleMessage(message) {
if(message.includes('dns')) {
// Take the data I want and re-organize for the API to use
// This removes the user ID text <@XXXXXXXXX>
var buf1 = Buffer.allocUnsafe(26);
buf1 = message;
buf2 = buf1.slice(13, buf1.length);
message = buf2.toString('ascii', 0, buf2.length);
/* There may be a better way with the Slack API, but this will work
returns URL as a string without extra formatting. Pre-formatted text appears like:
<http://webbhost.net|webbhost.net> */
var n = message.indexOf('|');
var o = message.indexOf('>');
var n = n+1;
var o = o-2;
var s1 = message.substr(n, o);
var p = s1.indexOf('>');
var s2 = s1.substr(0, p);
message = s2;
dnsLookup(message);
} else if(message.includes(' whois')) {
// Take the data I want and re-organize for the API to use
// This should probably be it's own function
var buf1 = Buffer.allocUnsafe(26);
buf1 = message;
buf2 = buf1.slice(13, buf1.length);
message = buf2.toString('ascii', 0, buf2.length);
var n = message.indexOf('|');
var o = message.indexOf('>');
var n = n+1;
var o = o-2;
var s1 = message.substr(n, o);
var p = s1.indexOf('>');
var s2 = s1.substr(0, p);
message = s2;
whoisLookup(message);
}
很明显,我在这里重复了很多代码,我想从中创建 2 个函数。现在我尝试在这个函数中这样做,看起来当我确实将它们设置为我不会永久更新我发送的变量的函数时(当我检查第一个函数的结果和开始时第二,它看起来像在第一个函数运行之前)。
我还需要以其他方式查看此问题吗?我可以将其作为一个功能来执行,但我正在努力为将来可能遇到的其他情况提供面向未来的证明。
这是我修改后的样子:
function handleMessage(message) {
function removeID(message) {
var buf1 = Buffer.allocUnsafe(26);
buf1 = message;
buf2 = buf1.slice(13, buf1.length);
message = buf2.toString('ascii', 0, buf2.length);
console.log(message);
}
function removeSlackURL(message){
console.log("test");
console.log(message);
var n = message.indexOf('|');
var o = message.indexOf('>');
var n = n+1;
var o = o-2;
var s1 = message.substr(n, o);
var p = s1.indexOf('>');
var s2 = s1.substr(0, p);
message = s2;
}
if(message.includes('dns')) {
// Take the data I want and re-organize for the API to use
// This removes the user ID text <@XXXXXXXXX>
removeID(message);
removeSlackURL(message);
【问题讨论】:
-
var n = n+1;应该做什么?如果您已经声明了变量,请从分配中删除vars。 -
学究式地,函数是值并且没有范围。但你的意思是引用函数的变量的范围。
标签: javascript function scope