Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产一级在线,久久亚洲精品成人综合,女同另类之国产女同

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript之匿名函數

          JavaScript之匿名函數

          avaScript中除了自定義函數之外,還有匿名函數?什么是匿名函數?

          1. 匿名函數:沒有函數名稱的函數。

          如:定義一個匿名函數,打印5個星星。

          <script>

          function (){ //沒有函數名稱

          for(var i=0;i<5;i++){

          document.write("*");

          }

          }

          </script>

          2. 調用匿名函數有2種方法:

          (1) 通過變量名調用匿名函數可以理解為將整個匿名函數瀆職給一個變量

          然后在body標簽中,定義一個按鈕:

          (2) 事件名調用匿名函數

          同樣在在body標簽中,先定義一個按鈕:注意在input標簽中我們不通過onclick來調用匿名函數

          然后我們通過2個事件調用2個匿名函數:

          注意:window.onload:頁面加載時觸發的事件,這里也就是頁面加載進來調用第一匿名函數

          document.getElementById("btn"):獲取id為btn的元素,也就是將按鈕獲取過來;document.getElementById("btn").onclick:點擊按鈕時,觸發第二個匿名函數

          一節 幫你精通JavaScript:簡單求積分的方法 中,我們分享了應用抽象的sum函數近似求pi值的方法:

          求pi的序列

          function pi_sum(a, b) {
              function pi_term(x) {
                  return 1 / (x * (x+2));
              }
              function pi_next(x) {
                  return x + 4;
              }
              return sum(pi_term, a, pi_next, b);
          }
          //該函數收斂于pi/8

          此案例中,我們不得不一本正經的寫出兩個“微不足道”的函數的定義,pi_term與pi_next,只為能在sum函數中順利的調用。如果不繁瑣費力的逐個定義,而只用其數學關系,豈不妙哉。

          Lambda-Expression應運而生,pi_term與pi_next可被直接寫為:

          x=> x + 4 //pi_next
          x=> 1 / (x * (x + 2)) //pi_term

          此語法簡潔優美,輸入 x 然后輸出所得值,用lambda-function重新撰寫pi_sum函數:

          function pi_sum(a, b) {
              return sum(x=> 1 / (x * (x + 2)),
                         a,
                         x=> x + 4,
                         b);
          }

          匿名函數的語法為:

          (parameters=> expression)

          匿名函數與define的函數是等效的, 比如:

          function plus4(x) {
            return x + 4;
          }
          //等效于
          const plus4=(x=> x + 4); //加上括號,視覺上更加清晰

          函數的調用也是相同的:

          ((x, y, z)=> x + y + square(z))(1, 2, 3);

          從直覺上,我們可以將lambda-function的語法逐步拆解:

          從了解js通過canvas壓縮圖片上傳功能以后,小白對javascript的敬畏之心又提升了一大截,這兩天在練習的時候發現自己平時熟悉的代碼變得陌生起來,比如為什么定義函數時這兩個方式都可以用。

          帶著這個疑問,小白找到了老朱。“朱哥,為啥在js里面要用兩種定義函數的方式呢?”

          老朱:“嚴格意義上來說上面那個不是定義一個函數,而是將一個變量指向了一個匿名函數,這里是引用的關系。你可以控制臺輸出一下兩個函數名看看?!?/p>

          小白執行了一下輸出以后驚訝的說道:“果然不一樣啊,一個有函數名,一個沒有函數名?!?/p>

          老朱:“在js中匿名函數用處非常大,這幾天我們寫的代碼里面有很多的匿名函數,你可以找找?!?/p>

          小白:“哇,隨便翻了一下昨天的代碼里面就有匿名函數啊。這段點擊按鈕上傳圖片的代碼中就有兩個?!?/p>

          老朱:“匿名函數非常有個特點,匿名函數如果沒有被引用,用完后會被銷毀,也就是垃圾回收釋放內存。如果被引用,而引用它的那個變量一直在內存中,它指向的匿名函數就會一直存在,不會被銷毀。比如上面的代碼中click里面的匿名函數沒有被引用,用完后會被銷毀,匿名函數中的success指向的匿名函數被引用,只有success被銷毀時,這個匿名函數才會被回收。垃圾回收這塊說起來會比較復雜,我們有時間詳細聊聊?!?/p>

          老朱頓了一下接著說道:“之前我們用到的匿名函數基本都用在了參數傳遞和引用上,在js中匿名函數還有一個非常重要的用法就是在頁面加載以后執行一個匿名函數?!?/p>

          “這個函數在頁面加載后會立即執行,如果函數有參數,可以通過最后面的小括號進行傳參。如果這個頁面被其他頁面加載調用,這里的匿名函數被加載以后就會立即執行,由于匿名函數中我們使用了var進行變量定義,因此匿名函數中的變量不會與主頁面中的變量沖突,匿名函數執行結束以后內部的變量也會被銷毀,不會占用內存?!?/p>

          “另外如果你的頁面中引入很多其他js文件,為了避免變量沖突,也需要在頁面中使用上面的匿名函數來規避風險?!?/p>


          想學H5的朋友可以關注老爐,您的關注是我持續更新《小白HTML5成長之路》的動力!


          主站蜘蛛池模板: 亚洲国产一区二区a毛片| 日本夜爽爽一区二区三区| 精品在线一区二区三区| 国产av天堂一区二区三区| 国产精品久久久久久一区二区三区 | 天堂Av无码Av一区二区三区| 国产一区二区三区免费| 波多野结衣av高清一区二区三区| 无码人妻精品一区二区三区久久| 国产一区三区三区| 亚洲国产精品一区二区第一页免| 无码日韩AV一区二区三区| 国产精品视频一区二区三区| 亚洲制服中文字幕第一区| 无码AV天堂一区二区三区| 少妇无码AV无码一区| 亚洲色精品aⅴ一区区三区| 精品久久国产一区二区三区香蕉| 动漫精品一区二区三区3d| 无码精品不卡一区二区三区| 日韩一区二区a片免费观看| 亚洲.国产.欧美一区二区三区| 男插女高潮一区二区| 手机福利视频一区二区| 亚洲av色香蕉一区二区三区| 国产成人精品一区二区A片带套| 国产精品一区视频| 免费看无码自慰一区二区| 八戒久久精品一区二区三区| 亚洲av高清在线观看一区二区 | 中文字幕VA一区二区三区| 国产亚洲欧洲Aⅴ综合一区| 中文字幕av无码一区二区三区电影| 国产在线精品一区二区中文| 激情亚洲一区国产精品| 国产伦精品一区二区三区免费下载| 国产成人一区二区三区精品久久| 无码人妻一区二区三区在线水卜樱 | 精品国产精品久久一区免费式| 国产一区二区精品在线观看| 一区二区三区久久精品|