Function.prototype.method = function (name, func) {
this.prototype[name] = func; return this;
};String.method('deentityify', function() { //请问这个函数时怎么立即执行的
var entity = { quot: '"', lt: '<', gt: '>'
}; return function() { return this.replace(/&([^&;]+);/g, function(a, b) { //replace 传给函数的不是三个参数么这两个代表什么?
var r = entity[b]; return typeof r === 'string' ? r : a;
});
};
}()); //标记蝴蝶书上看到第四章模块一节遇到的问题, 这个函数不是匿名函数么,按我的理解应该在function函数体外加个括号啊,向这样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;
});
};
})()); //标记这也能执行, 结果也一样, 但是有什么不同么?对于没加括号的函数是不是这样,它在执行下面这一句时执行, 这样的话就是函数表达式,也就不需要括号了。this.prototype[name] = func;请各位指点一下, 谢谢!
1 回答
![?](http://img1.sycdn.imooc.com/545863aa00014aa802200220-100-100.jpg)
慕勒3428872
TA贡献1848条经验 获得超6个赞
自执行或者立即调用的函数表达式
简单理解,第一,函数加括弧()表示一个表达式,有两种写法都可以(对于达到的效果没什么区别):
// 第一种(function () { /* code */ } ()); // 第二种(function () { /* code */ })();
其实,很多书上有些,只要你让解析器认为这是一个表达式,那么都会执行,比如一元操作符:
+function () { /* code */ } (); -function () { /* code */ } (); !function () { /* code */ } (); ~function () { /* code */ } ();
关于replace第二个参数是函数
推荐读一下官方文档。
首先,这个方法的参数是没有固定个数的,不过有一定规则
第一个参数是每次正则匹配到的字符串,这个是固定的。上面的a就是每次正则匹配到的
后续是捕获组匹配到的内容,子表达式。上面的b 就是前面正则括弧里面的内容
接下来是 匹配字符串开始的下标索引index
再接下里是源字符串
添加回答
举报
0/150
提交
取消