如何在JavaScript中向替换函数传递额外变量?
如何向String.replace的回调函数传递额外变量?
你试过的use语法是PHP特性,JS里不适用,给你几种靠谱的实现方式:
方法一:嵌套函数利用闭包
直接把matching_fn定义在foo函数内部,借助闭包特性直接访问外层的obj变量,这是最简洁的方案:
function foo() { var obj = []; var text = '...'; text = text.replace(/.../g, matching_fn); function matching_fn($match, $match1, $match2) { // 这里可以直接使用obj obj.push($match); } }
方法二:用bind绑定额外参数
如果matching_fn需要放在外部,可通过bind给它绑定前置参数,注意replace回调的参数顺序——绑定的参数会排在匹配结果的前面:
function foo() { var obj = []; var text = '...'; // 将obj作为第一个参数绑定给matching_fn text = text.replace(/.../g, matching_fn.bind(null, obj)); } // 注意参数顺序,obj要放在最前面 function matching_fn(obj, $match, $match1, $match2) { // 这里可以使用obj obj.push($match); }
方法三:用箭头函数包裹传递
用箭头函数作为replace的回调,它能捕获外层作用域的obj,再在内部调用matching_fn并传入所需参数:
function foo() { var obj = []; var text = '...'; text = text.replace(/.../g, ($match, $match1, $match2) => { return matching_fn(obj, $match, $match1, $match2); }); } function matching_fn(obj, $match, $match1, $match2) { // 这里可以使用obj }
内容的提问来源于stack exchange,提问作者rhavin
相关产品推荐
相关产品推荐

