为了自我提升,我正在阅读(并反复阅读) Señor Crockford 的《TGP》。然而,我无法理解他的 deentityify 方法的中间部分。
...
return this.replace(...,
function (a, b) {
var r = ...
}
);
我理解:
- this.replace传递了两个参数,一个是正则表达式作为搜索值,另一个是生成替换值的函数;
- b用于访问实体对象中的属性;
- 返回的
? r : a;
位决定是否原样返回文本还是返回实体中相应属性的值。
我完全不明白的是a和b如何作为参数传递到function(a, b)
中。是什么调用了这个函数?(我知道整个代码是自执行的,但这并没有真正澄清我的疑惑。我想问的是这个函数是如何被调用的?)
如果有人有兴趣给出类似于这个的逐行分析,我会非常感激,而且我相信其他人也会。
以下是代码:
String.method('deentityify', function ( ) {
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
return function () {
return this.replace(
/&([^&;]+);/g,
function (a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
}
);
};
}());
a
和b
都不是数字偏移量。 - Dave Newtona
是数字偏移量,而他说它是b
。(我知道b
不是,因为他说其中一个是,所以我没有仔细看)。我开始意识到b
必须缺少周围的&
和;
才能匹配实体属性。感谢你们两个的帮助。我不太确定该选择哪个答案,因为@phihag的答案不完全正确,但它是更详细的答案。也许你可以更新一下,phihag? - Nick