Я пытаюсь обмотать мозг вокруг замыканий. Я читал Javascript: хорошие части, и автор представляет этот фрагмент кода для добавления «» deentityify метод объектов String, идея в том, чтобы расшифровать HTML-enocoded символы:Javascript: Какие параметры передаются функции?
// the method method:
Function.prototype.method = function(name, func) {
if (! this.prototype[name]) {
this.prototype[name] = func;
return this;
}
}
String.method('deentityify', function() {
// entity table: maps entity names
// to characters:
var entity = {
quot: '"',
lt: '<',
gt: '>',
};
// Return the deentityify method:
return function() {
return this.replace(/&([^&;]+);/g,
// What are a & b, how are they getting passed?!
function (a, b) {
// console.log added by me, unsuccessfully:
console.log('a = ' + a);
console.log('b = ' + b);
var r = entity[b];
return typeof r === 'string' ? r : a;
}
);
};
}());
Так я понимаю большинство о том, что здесь происходит, кроме фактических параметров, передаваемых функции, определяемой как второй параметр String.replace. Как определить «a» и «b»?
Непосредственно вызов '"' .deentityify() явно не передает никаких параметров. Итак, как они определяются? В качестве второстепенного вопроса, почему console.log() не работает для регистрации значений a и b? Могу ли я успешно записывать такие переменные?
Спасибо за помощь.
EDIT: 'not' ранее отсутствовал в последнем предложении, что делает смысл неясным.
Попробуйте '' { ".deentityify()' - функция только делает что-нибудь интересное, когда вы используете ее в строке с объектами HTML в ней. – Pointy