2017-02-28 74 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"))