2016-01-28 139 views
0

爲什麼我必須將替換函數放在str.replace語句中?外部替換函數不起作用

這工作得很好:

str = str.replace(/&|<|>|"|'/g, function replacer(match) { 
switch (match) { 
    case "&": 
    return "&amp;"; 
    case "<": 
    return "&lt;"; 
    case ">": 
    return "&gt;"; 
    case '"': 
    return "&quot;"; 
    case "'": 
    return "&apos;"; 
} 
}); 

這不起作用,返回「引用錯誤:比賽沒有定義」:

str = str.replace(/&|<|>|"|'/g, replacer(match)); 

function replacer(match) { 
switch (match) { 
    case "&": 
    return "&amp;"; 
    case "<": 
    return "&lt;"; 
    case ">": 
    return "&gt;"; 
    case '"': 
    return "&quot;"; 
    case "'": 
    return "&apos;"; 
} 
} 

爲什麼我不能調用替代品()作爲外部功能?傳遞參數對於其他函數來說是一件輕而易舉的事,但在這個上下文中並不存在 - 從str.replace語句中。只是好奇,如果好奇心被允許。此外,它讓我感到... ...謝謝!

(搜索和雙到處尋找一個答案,然後再發布)

回答

1

這樣稱呼它:

str = str.replace(/&|<|>|"|'/g, replacer); 

這意味着你傳遞給函數,而不是一個函數調用的結果。

0

回調函數應該使用

function replacer(match) { 
    switch (match) { 
     case "&":... 
    } 
} 
str = str.replace(/&|<|>|"|'/g, replacer(match)); 
+0

整潔之前創建!謝謝!我會牢記這一點。如果人們不注意使用這樣的良好實踐,JS看起來有點雜亂。我很感激!問候 – ojnord