[英]Javascript: What parameters are being passed to function?
我試圖將我的大腦包裹在封閉處。 我一直在閱讀Javascript:The Good Parts,作者介紹了以下代碼片段,用於向String對象添加“ deentityify”方法,該想法是對HTML編碼符號進行解碼:
// 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()用於記錄的值不能工作和b?有什么辦法我能否成功記錄此類變量?
謝謝您的幫助。
編輯:最后一句話以前沒有' not ',因此含義不清楚。
.replace()
函數可以將函數作為第二個參數來調用。 這樣做時,將在正則表達式成功匹配從匹配過程中提取的參數之后調用該函數。
第一個參數始終是源字符串的整個匹配部分。 后續參數表示來自正則表達式的“捕獲組”。
在這種情況下,正則表達式為/&([^&;]+);/g
。 該字符與“&”號匹配,后跟“&”或分號以外的任意數量的字符,后跟一個分號。 前導“與”號和尾隨的分號之間的字符被“捕獲”,因為正則表達式的該部分帶有括號。
因此,如果源字符串是
Hello — world!
然后匹配該正則表達式(一次)將產生:
—
作為整體匹配字符串 mdash
作為第一個(在這種情況下,也是唯一一個)捕獲組的值。 從而:
"Hello — world!".replace(/&([^&;]+);/g, function(all, group) {
alert("entire match: " + all + " group: " + group);
});
會根據我上面列出的內容顯示一條消息。
現在,最重要的是,問題中的代碼涉及另一層有趣的行為。 實際上傳遞給method()
函數的函數不是那個大的外部函數,而是從該函數返回的函數。 該返回的函數希望被調用,使得this
是一個String實例; 否則,對this.replace()
的調用將無法工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.