国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別

這篇具有很好參考價值的文章主要介紹了【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

它們之間的區(qū)別:
(1)箭頭函數(shù)沒有自己的this。
(2)不可以當作構(gòu)造函數(shù),不可以對箭頭函數(shù)使用new命令,否則拋出錯誤。
(3)不可以使用arguments對象,該對象在函數(shù)體內(nèi)不存在。如果要用,可以用 rest 參數(shù)代替。
(4)不可以使用yield命令,箭頭函數(shù)不能用作 Generator 函數(shù)。

下面結(jié)合代碼來解析:第一點和第二點

1、不可以當作構(gòu)造函數(shù),也就是說,不可以對箭頭函數(shù)使用new命令,否則會拋出一個錯誤

<script>
//箭頭函數(shù)
let demo01 = ()=>{
    console.log("demo01");
}

let demo01Fun =new demo01();


</script>

輸出結(jié)果:
【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript

<script>
//普通函數(shù)
function demo02(){
    console.log("demo02");
}

let demo02Fun =new demo02();


</script>

【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript

2、箭頭函數(shù)沒有自己的this對象
下面代碼通過call函數(shù)給函數(shù)指定了this{id:42}

<script>

function demo01() {
	//箭頭函數(shù)
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

demo01.call({ id: 42 });

</script>

輸出結(jié)果:
【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript
但是同樣是調(diào)call函數(shù)指定this{id:42},為何輸出的卻是全局中id= 21呢?

<script>
    //普通函數(shù)
    function demo02() {
        setTimeout(function () {
            console.log('id:', this.id);
        }, 100);
    }

    var id = 21;

    demo02.call({ id: 42 });

</script>

【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript
下面給代碼加上斷點調(diào)試一下看看:

<script>
    //普通函數(shù)
    function demo02() {
        debugger;
        setTimeout(function () {
            debugger;
            console.log('id:', this.id);
        }, 100);
    }
    debugger;
    var id = 21;
    demo02.call({ id: 42 });
</script>

代碼運行到第一個斷點時,Global中存在id=21
【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript
代碼運行到第二斷點處,此時出現(xiàn)方法demo02的局部變量Local,this指向的是{id:42}。
【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript
代碼運行到定時器時,this指向的windows,id=21。
【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別,前端,es6,前端,ecmascript
而定時器中是箭頭函數(shù)的,這時this指向的{id:42},從這可以看出箭頭函數(shù)繼承了調(diào)用它時的this。
也就是:
它沒有自己的this對象,內(nèi)部的this就是定義時上層作用域中的this。也就是說,箭頭函數(shù)內(nèi)部的this指向是固定的,相比之下,普通函數(shù)的this指向是可變的。

箭頭函數(shù)沒有this,箭頭函數(shù)的ES5等價寫法如下:

// ES6
function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

// ES5
function foo() {
  var _this = this;

  setTimeout(function () {
    console.log('id:', _this.id);
  }, 100);
}

思考題:
請問下面的t1、t2、t3分別輸出什么?文章來源地址http://www.zghlxwxcb.cn/news/detail-658890.html

function foo() {
  return () => {
    return () => {
      return () => {
        console.log('id:', this.id);
      };
    };
  };
}

var f = foo.call({id: 1});

var t1 = f.call({id: 2})()(); 
var t2 = f().call({id: 3})(); 
var t3 = f()().call({id: 4}); 

到了這里,關(guān)于【ES6】箭頭函數(shù)和普通函數(shù)的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ES6系列之let、const、箭頭函數(shù)使用的坑

    ES6系列之let、const、箭頭函數(shù)使用的坑

    變量提升 塊級作用域的重要性 箭頭函數(shù)this的指向 rest參數(shù)和arguments Babel是一個廣泛使用的ES6轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在老版本的瀏覽器執(zhí)行。這意味著,你可以用ES6的方式編寫程序,又不用擔心現(xiàn)有環(huán)境是否支持。 ?上面的原始代碼用了箭頭函數(shù),Babel將其轉(zhuǎn)

    2024年02月14日
    瀏覽(54)
  • 【ECMAScript】ES6-ES11學習筆記

    注意事項 代碼中的注釋有筆記如 有一些錯誤示范代碼,為了代碼整體可運行,將其注釋如 當代碼有輸出是,通常將輸出放在對應(yīng)代碼下一行,并注釋如下 1.聲明變量 2.定義常量 3.解構(gòu)賦值 4.模板字符串 5.簡化對象寫法 6.箭頭函數(shù) 箭頭函數(shù)適合與this無關(guān)的回調(diào),定時器,數(shù)

    2024年02月13日
    瀏覽(52)
  • ES5 構(gòu)造函數(shù)與ES6 Class的區(qū)別

    Class 類中不存在變量提升 class內(nèi)部會啟用嚴格模式 class的所有方法都是不可枚舉的 class 必須使用new調(diào)用 class 內(nèi)部無法重寫類名 class 的繼承有兩條繼承鏈 一條是: 子類的__proto__ 指向父類 另一條: 子類prototype屬性的__proto__屬性指向父類的prototype屬性. es6的子類可以通過__pro

    2024年02月06日
    瀏覽(31)
  • ES5 的構(gòu)造函數(shù)和 ES6 的類有什么區(qū)別

    在JavaScript中,類和構(gòu)造函數(shù)都被用來創(chuàng)建對象,接下來會從以下幾點說說兩者的區(qū)別: 構(gòu)造函數(shù)使用函數(shù)來定義 類使用class來定義 ES6 的 class 可以看作是一個語法糖,這種寫法只是讓對象原型的寫法更加清晰、更像面向?qū)ο缶幊痰恼Z法。 比如這是一個構(gòu)造函數(shù)生成實

    2024年02月11日
    瀏覽(23)
  • ES6 全詳解 let 、 const 、解構(gòu)賦值、剩余運算符、函數(shù)默認參數(shù)、擴展運算符、箭頭函數(shù)、新增方法,promise、Set、class等等

    ? ECMAScript 6.0,簡稱 ES6,是 JavaScript 語言的下一代標準,已經(jīng)在 2015 年 6 月正式發(fā)布了。它的目標,是使得 JavaScript 語言可以用來編寫復雜的大型應(yīng)用程序,成為企業(yè)級開發(fā)語言 要講清楚這個問題,需要回顧歷史。1996 年 11 月,JavaScript 的創(chuàng)造者 Netscape 公司,決定將 JavaSc

    2024年04月15日
    瀏覽(30)
  • ES6(ECMAScript 2015)有哪些新屬性,如何判斷當前瀏覽器是否支持?

    ES6(ECMAScript 2015)有哪些新屬性,如何判斷當前瀏覽器是否支持?

    ES6(ECMAScript 2015)引入了許多新的語法和特性,以增強 JavaScript 編程語言的功能。以下是一些常見的 ES6 語法和特性以及它們的解釋: let 和 const 聲明 : let 和 const 用于聲明變量,代替了舊的 var 。 let 聲明的變量具有塊級作用域,而 const 聲明的變量是不可變的(常量

    2024年02月07日
    瀏覽(27)
  • 【React系列】ES6學習筆記(一)let與const、解構(gòu)賦值、函數(shù)參數(shù)默認值\rest參數(shù)\箭頭函數(shù)、數(shù)組和對象的擴展、Set和Map等

    本文參考自電子書《ECMAScript 6 入門》:https://es6.ruanyifeng.com/ 盡量使用 let 聲明變量,而不是 var 。 let 聲明的變量是 塊級作用域 , var 聲明的變量是 全局作用域 。 使用 let 變量 必須先聲明再使用,否則報錯,不存在變量提升 。相對的 var 聲明的變量如果提前使用,不會報錯

    2024年02月03日
    瀏覽(36)
  • es5和es6區(qū)別

    ES5和ES6都是JavaScript語言的版本,ES5在2009年發(fā)布,ES6在2015年發(fā)布,兩者之間有以下的區(qū)別: 1、變量聲明方式不同:ES5使用var進行變量聲明,而ES6則引入了let和const來聲明變量。 2、塊級作用域:在ES5中,只存在全局作用域和函數(shù)作用域,而ES6中增加了塊級作用域

    2024年02月10日
    瀏覽(13)
  • es5和es6的區(qū)別

    ES5 和 ES6 的區(qū)別 ECMAScript5,即 ES5,是 ECMAScript 的第五次修訂,于 2009 年完成標準化 ECMAScript6,即 ES6,是 ECMAScript 的第六次修訂,于 2015 年完成,也稱 ES2015 ES6 是繼 ES5 之后的一次改進,相對于 ES5 更加簡潔,提高了開發(fā)效率. ES6 的新增方法 1、新增聲明命令 let 和 const 在 ES6

    2024年01月16日
    瀏覽(18)
  • 談?wù)凟S5和ES6的區(qū)別

    談?wù)凟S5和ES6的區(qū)別

    我們都知道JavaScript是由三部分組成: 1. ECMAScript(核心):規(guī)定了語言的組成部分=語法、類型、語句、、保留字、操作符、對象 2. BOM(瀏覽器對象模型): 支持訪問和操作瀏覽器窗口,可以控制瀏覽器顯示頁面以外的部分。 3. DOM(文檔對象模型): 把整個頁面映射為一個多層節(jié)

    2024年02月02日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包