整合營銷服務商

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

          免費咨詢熱線:

          JavaScript 箭頭函數特點與用法詳解

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

          我們來聊聊箭頭函數(就是下面這個東西)!箭頭函數的語法比傳統的函數表達式更簡潔,而且它們沒有自己的 thisarguments、supernew.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(); // "匿名函數"
          

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

          最后

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

          們經??吹皆S多網站或者H5的動畫都做成了整屏切換的形式,為提高用戶體驗,會在首屏頁面下方放上一個動態的向下箭頭來提示用戶切換至下一屏。

          動態箭頭的效果圖如下:

          那么這種效果是如何實現的呢?

          其實非常簡單,在CSS3中提供了animation屬性,專門用于動畫。要使用這個屬性,需要先了解@keyframes的創建規則,在 @keyframes 中規定某項 CSS 樣式,就能創建由當前樣式逐漸改為新樣式的動畫效果。

          在這個動畫中,我們能夠看出在整個動畫中改變的是箭頭的位置,所以我們在創建動畫時,只需要給定箭頭的起始位置,利用animation讓他動起來就可以了。

          接下來,我們一步一步完成。

          1、首先找到你所需要的箭頭圖片,將他利用定位的方式放在首屏的底部。

          a)html代碼(將圖片以背景或者插入圖片的形式放入標簽內,demo以背景形式展示)

          b)css代碼(利用定位將箭頭放在首屏的底部適當位置,網站中大部分情況會進行左右居中)

          2、然后進行動畫創建,最簡單的方式就是只給定初始的以及結束的css樣式即可。

          css 代碼

          標注出來的為動畫的自定義名稱,可以根據你的動畫行為來定義。

          0%為初始狀態,即剛開始動畫時。

          100%為結束狀態,即動畫進行到100%時。

          動畫改變了箭頭的底部位置,由距離底部80像素變到了距離底部0像素。

          3、接下來利用animation屬性讓他具有動畫效果

          css代碼:

          第一個參數表示你所使用的動畫的名稱(即我們創建的動畫的動畫名稱),

          第二個參數表示動畫完成的時間(即由0%到100%所用的時間),

          第三個參數表示動畫執行的次數(可以為任意數字,infinite表示規定動畫無限次播放),因此造成了一個動態的箭頭的視覺效果。

          通過以上三個步驟即可完成這個簡單的動畫效果,很多的動畫效果都可以通過創建動畫的方式來實現。

          原文地址北京市盛世陽光文化傳播有限責任公司:http://www.gonet.com.cn/webduirshow-140.html

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

          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


          主站蜘蛛池模板: 一区二区三区杨幂在线观看| 国产一区二区在线观看app| 亚洲一区二区三区久久| 精品人体无码一区二区三区 | 精品国产精品久久一区免费式 | 国产亚洲无线码一区二区| 久久se精品一区二区影院| 亚洲午夜电影一区二区三区| 在线观看中文字幕一区| 国模丽丽啪啪一区二区| 在线观看免费视频一区| 亚洲AV无码一区二区三区国产| 国产午夜精品一区二区| 日韩精品人妻av一区二区三区| 日本免费一区二区三区四区五六区 | 国产色欲AV一区二区三区| 高清一区二区三区| 色欲综合一区二区三区| 成人毛片一区二区| 国产成人AV一区二区三区无码| 99久久精品国产一区二区成人| 无码av中文一区二区三区桃花岛| 夜夜嗨AV一区二区三区| 视频一区视频二区在线观看| 亚洲av无码片区一区二区三区| 中文字幕亚洲乱码熟女一区二区 | 中日韩精品无码一区二区三区| 中文字幕在线视频一区| 精品天海翼一区二区| 无码日韩人妻AV一区免费l| 国语对白一区二区三区| 国产精品福利一区二区| 日本精品一区二区三区视频| 久久国产午夜精品一区二区三区| 无码日韩人妻AV一区二区三区| 精品乱码一区内射人妻无码| 亚洲一区日韩高清中文字幕亚洲 | 国产精品盗摄一区二区在线| 日本韩国黄色一区二区三区| 一本色道久久综合一区 | 国产一区二区三区免费观在线|