有没有办法让这个函数不创建一个全局变量,而body仍然只是一行上的表达式(返回后)。
似乎它是否适用于制作全局,应该是一种使用本地
的方法
getHashKeyValues = function(h){
return p={},h.replace(/[\|;]+([^=;]+)=([^;]*)/gi,function(s,k,v){p[k]=v}),p
}
console.log(getHashKeyValues("#/app/path|key1=value1;key2=value2"))
答案 0 :(得分:4)
您可以将p
声明为函数参数:
getHashKeyValues = function(h,p){
return p={},h.replace(/[\|;]+([^=;]+)=([^;]*)/gi,function(s,k,v){p[k]=v}),p
};
这将使p
成为函数中的局部变量,就像使用var
声明它一样。仅使用一个参数调用该函数是完全有效的,p
将只是undefined
,直到它被赋值为止。
答案 1 :(得分:3)
在函数中将Scanner scan = new Scanner(System.in);
boolean validInput = false;
int val = 0;
while(!validInput) {
try {
val = scan.nextInt();
validInput = true;
} catch(InputMismatchException e) {
System.out.println("Please enter an integer!");
scan.next();
}
}
System.out.println("You entered: " + val);
声明为p
。
var
让它可读 - 这是写这篇文章的一种糟糕方式。
编辑哦,我错过了“一线”的要求,这使我的回答无效。
即使我是对的:p
答案 2 :(得分:2)
我同意Dave Newton的观点,但如果您真的想这样做,请添加p
作为第二个参数,然后进行修改。
getHashKeyValues = function(h, p){
return p={},h.replace(/[\|;]+([^=;]+)=([^;]*)/gi,function(s,k,v) {p[k]=v}),p
}
console.log(getHashKeyValues("#/app/path|key1=value1;key2=value2"))