2017-02-28 73 views
3

有没有办法让这个函数不会创建一个全局变量,而主体仍然只是一行上的表达式(返回后)。Javascript在return语句中创建本地对象

好像如果它使一个全球性的工作,应该是一种方式与本地

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

回答

4

你可以声明p作为函数参数:

getHashKeyValues = function(h,p){ 
    return p={},h.replace(/[\|;]+([^=;]+)=([^;]*)/gi,function(s,k,v){p[k]=v}),p 
}; 

这将使p在函数的局部变量一样,如果你有var宣布它。只用一个参数调用该函数是完全有效的,p只是undefined,直到它被赋值为止。

3

做声明p作为功能var

getHashKeyValues = function(h) { 
    var p = {}; 
    h.replace(/[\|;]+([^=;]+)=([^;]*)/gi,function(s,k,v){p[k]=v}); 
    return p; 
} 

,使其可读–这是写这一个可怕的方式。

编辑哦,我错过了“一行”的要求,这使我的答案不合格。

即使我是正确的:P

+1

人类的缩小器... – baao

+0

@baao它实际上是一种令人印象深刻的:) –

2

我同意戴夫牛顿,但如果你真的想这样做,请添加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"))