整合營銷服務商

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

          免費咨詢熱線:

          css3制作網頁中常見的小箭頭

          * css3三角形(向上 ▲) */

          div.arrow-up {

          width:0px;

          height:0px;

          border-left:5px solid transparent; /* 右透明 */

          border-right:5px solid transparent; /*右透明 */

          border-bottom:5px solid #2f2f2f; /* 定義底部顏色 */

          font-size:0px;

          line-height:0px;

          }

          家好,很高興又見面了,我是姜茶的編程筆記,我們一起學習前端相關領域技術,共同進步,也歡迎大家關注、點贊、收藏、轉發,您的支持是我不斷創作的動力

          我們來聊聊箭頭函數(就是下面這個東西)!箭頭函數的語法比傳統的函數表達式更簡潔,而且它們沒有自己的 thisargumentssupernew.target。它們非常適合用在需要匿名函數的地方,同時不能作為構造函數使用。

          // 當只有一個參數時,圓括號不是必須的
          (singleParam) => { statements }
          singleParam => { statements }
          
          // 沒有參數的函數必須加圓括號
          () => { statements }
          

          箭頭函數有兩個主要優點:

          1?? 語法更簡潔

          2?? 不會綁定 this

          切入正題【特點】

          沒有自己的 this

          箭頭函數不會創建自己的 this,它只會繼承外層作用域的 this

          function Person() {
           this.age = 0;
          
           setInterval(() => {
            // this 正確地指向 p 實例
            console.log(this === p); // true
            this.age++;
           }, 1000);
          }
          
          var p = new Person();
          

          與嚴格模式的關系

          由于 this 是詞法綁定的,嚴格模式中與 this 相關的規則將被忽略。

          var f = () => { 'use strict'; return this; };
          f() === window; // 或 global
          

          通過 call、apply 或 bind 調用

          因為箭頭函數沒有自己的 this,使用這些方法調用時只能傳遞參數,它們的第一個參數 this 會被忽略。

          let adder = {
           base: 1,
           add: function (a) {
            console.log(this === adder); // true
            let f = (v) => v + this.base;
            return f(a);
           },
           addThruCall: function (a) {
            let f = (v) => {
             console.log(this === adder); // true
             console.log(`v 的值是 ${v},this.base 的值是 ${this.base}`); // 'v 的值是 1,this.base 的值是 1'
             return v + this.base;
            };
            let b = { base: 3 };
            // call() 方法不能綁定 this 為 b 對象,第一個參數 b 被忽略了
            return f.call(b, a);
           }
          };
          
          console.log(adder.add(1)); // 輸出 2
          console.log(adder.addThruCall(1)); // 輸出 2
          

          使用箭頭函數作為方法

          箭頭函數沒有 this 綁定。

          "use strict";
          var obj = {
           i: 10,
           b: () => console.log(this.i, this), // undefined, Window{...}
           c: function () {
            console.log(this.i, this); // 10, Object {...}
           }
          };
          obj.b();
          obj.c();
          

          使用 new 操作符

          箭頭函數不能用作構造函數,用 new 調用會拋出錯誤。

          var Foo = () => {};
          var foo = new Foo(); // TypeError: Foo is not a constructor
          

          作為匿名函數

          ES6 的箭頭函數表達式是匿名函數的一種簡寫方式:

          // 匿名函數
          let show = function () {
              console.log("匿名函數")
          };
          show(); // "匿名函數"
          
          let show1 = () => console.log("匿名函數");
          show1(); // "匿名函數"
          

          不過,箭頭函數和傳統匿名函數在實際操作中還是有一些區別的。

          最后

          如果你有任何問題或建議,歡迎在評論區留言交流!祝你編程愉快!

          為了理解箭頭函數的語法,我們應該從逐步重構一個常規函數開始:

          function square(a) { return a * a; }

          我們首先重構函數聲明以使用變量賦值:

          const square = function (a) { return a * a; }

          然后,我們可以將正則重構為箭頭函數 function:

          const square = (a) => { return a * a; }

          如果只有一個參數,我們可以省略它周圍的括號:

          const square = a => { return a * a; }

          如果函數是單個表達式,則可以省略花括號和return語句并使用隱式返回:

          const square = a => a * a;

          執行上下文

          箭頭函數和常規函數的主要區別在于執行上下文(即 的值this)。從技術上講,經常提到的大多數其他差異要么源于這一差異,要么是它的副作用。

          在常規函數中,this它是動態的,取決于函數的調用方式:

          function simple() { return this; }
          const object = {
            method() { return this; }
          };
          class Class {
            classMethod() { console.log(this); }
          }
          const instance = new Class();
          
          simple();                   // `this` 指向全局對象
          new simple();               // `this` 指向新創建的實例
          
          object.method();            // `this` 指的是 `object`
          simple.call(object);        // `this` 指的是 `object`
          
          instance.classMethod();     // `this` 指向 `instance`
          setTimeout(
            instance.classMethod, 0   // `this` 指向全局對象
          );

          與常規的箭頭函數不同,箭頭函數不定義自己的執行上下文,因此this箭頭函數內部總是指的是詞法this(即定義箭頭函數的范圍)。

          const simple = () => this;
          const object = {
            method: () => this
          };
          class Class {
            classMethod = () => { console.log(this); }
          }
          const instance = new Class();
          
          simple();                   // `this` 指向全局對象
          new simple();               // 未捕獲的 TypeError:simple 不是構造函數
          object.method();            //`this` 指的是全局對象
          simple.call(object);        // `this` 指的是全局對象
          
          instance.classMethod();     // `this` 指的是`instance`
          setTimeout(
            instance.classMethod, 0   // `this` 指的是`instance`
          );

          正如您從這些示例中看到的那樣,構造函數的工作方式因執行上下文及其解析方式而有所不同。與將拋出一個箭頭函數相反,常規函數可以用作構造函數TypeError

          此外,箭頭函數和常規函數在用于定義類方法時存在一些差異。當作為回調傳遞時,常規函數方法將以不同的執行上下文結束。這可以使用Function.prototype.bind()或使用不存在此問題的箭頭函數來處理。

          更多內容請訪問:https://www.icoderoad.com


          主站蜘蛛池模板: 亚洲一区二区三区影院| 亚洲AV无码一区二区二三区入口| 精品成人一区二区三区免费视频 | 精品国产一区二区三区无码| 一区二区三区四区视频在线| 亚洲国产成人精品无码一区二区 | 精品国产一区二区三区| 国产日韩一区二区三区在线观看| 国产在线观看精品一区二区三区91| 日韩免费无码一区二区三区| 国产一区二区三区免费观在线 | 精品无码日韩一区二区三区不卡| 久久国产午夜精品一区二区三区| 国产人妖视频一区二区破除| 冲田杏梨AV一区二区三区| 激情内射亚洲一区二区三区| 无码人妻精品一区二区三区东京热 | 国产日韩一区二区三区在线播放| 亚洲AV福利天堂一区二区三| 亲子乱av一区二区三区| 国产91一区二区在线播放不卡| 精品成人一区二区三区免费视频| 国产乱码精品一区三上| 国产一区二区三区在线观看影院| 精品欧美一区二区在线观看 | bt7086福利一区国产| 中文字幕av一区| 国产精品无码亚洲一区二区三区| 激情无码亚洲一区二区三区| 好吊妞视频一区二区| 福利一区二区在线| 中文字幕一区二区三区精华液| 日本高清成本人视频一区| 亚洲国产综合精品中文第一区| 国产精品亚洲一区二区三区在线| 久久精品国产一区二区三| 国产精品夜色一区二区三区| 夜夜高潮夜夜爽夜夜爱爱一区| 国产高清一区二区三区视频| 精品福利一区二区三区| 国产AV一区二区三区传媒|