亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我在蝴蝶書上遇到的問題,關于函數的立即執行

我在蝴蝶書上遇到的問題,關于函數的立即執行

至尊寶的傳說 2018-08-10 13:29:50
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 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

自執行或者立即調用的函數表達式
簡單理解,第一,函數加括弧()表示一個表達式,有兩種寫法都可以(對于達到的效果沒什么區別):

// 第一種(function () { /* code */ } ());  
// 第二種(function () { /* code */ })();

其實,很多書上有些,只要你讓解析器認為這是一個表達式,那么都會執行,比如一元操作符:

+function () { /* code */ } ();
-function () { /* code */ } ();
!function () { /* code */ } ();
~function () { /* code */ } ();

關于replace第二個參數是函數
推薦讀一下官方文檔。
首先,這個方法的參數是沒有固定個數的,不過有一定規則

  • 第一個參數是每次正則匹配到的字符串,這個是固定的。上面的a就是每次正則匹配到的

  • 后續是捕獲組匹配到的內容,子表達式。上面的b 就是前面正則括弧里面的內容

  • 接下來是 匹配字符串開始的下標索引index

  • 再接下里是源字符串


查看完整回答
反對 回復 2018-08-12
  • 1 回答
  • 0 關注
  • 594 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號