Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
String.method('deentityify', function() { //請問這個函數(shù)時怎么立即執(zhí)行的
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
return function() {
return this.replace(/&([^&;]+);/g,
function(a, b) { //replace 傳給函數(shù)的不是三個參數(shù)么這兩個代表什么?
var r = entity[b];
return typeof r === 'string' ? r : a;
});
};
}()); //標(biāo)記
蝴蝶書上看到第四章模塊一節(jié)遇到的問題, 這個函數(shù)不是匿名函數(shù)么,按我的理解應(yīng)該在function函數(shù)體外加個括號啊,向這樣
String.method('deentityify', (function() { //標(biāo)記
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
return function() {
return this.replace(/&([^&;]+);/g,
function(a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
});
};
})()); //標(biāo)記
這也能執(zhí)行, 結(jié)果也一樣, 但是有什么不同么?
對于沒加括號的函數(shù)是不是這樣,它在執(zhí)行下面這一句時執(zhí)行, 這樣的話就是函數(shù)表達(dá)式,也就不需要括號了。
this.prototype[name] = func;
請各位指點(diǎn)一下, 謝謝!
自執(zhí)行或者立即調(diào)用的函數(shù)表達(dá)式
簡單理解,第一,函數(shù)加括?。ǎ┍硎疽粋€表達(dá)式,有兩種寫法都可以(對于達(dá)到的效果沒什么區(qū)別):
// 第一種
(function () { /* code */ } ());
// 第二種
(function () { /* code */ })();
其實(shí),很多書上有些,只要你讓解析器認(rèn)為這是一個表達(dá)式,那么都會執(zhí)行,比如一元操作符:
+function () { /* code */ } ();
-function () { /* code */ } ();
!function () { /* code */ } ();
~function () { /* code */ } ();
關(guān)于replace第二個參數(shù)是函數(shù)
推薦讀一下官方文檔。
首先,這個方法的參數(shù)是沒有固定個數(shù)的,不過有一定規(guī)則
沒加括號的這個屬于函數(shù)表達(dá)式,不過它賦值之前已經(jīng)執(zhí)行過了
this.prototype[name] = func;
// 這里的func 已經(jīng)是
function() {
return this.replace(/&([^&;]+);/g,
function(a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
});
};
你看下上述圖片,是一個效果。 平常寫(function(){...})()的形式是防止瀏覽器解析出錯,直接function(){...}()這么去運(yùn)行肯定報錯,瀏覽器以為你是在定義方法。但是置于參數(shù)中或者前面加了別的符號,讓瀏覽器以為是表達(dá)式就會直接執(zhí)行了
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。