Javascript在return语句中创建本地对象

时间:2017-02-28 20:33:01

标签: javascript

有没有办法让这个函数不创建一个全局变量,而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"))

3 个答案:

答案 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"))