日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

# 普通函数和箭头函数的区别

發(fā)布時間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 # 普通函数和箭头函数的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

普通函數(shù)和箭頭函數(shù)

寫在前面

函數(shù)(Function)是 JavaScript 里的‘一等公民’。是由稱為函數(shù)體的一系列語句組成。可以當做入?yún)?#xff0c;出參(返回值)使用。和對象一樣,有自己的屬性和方法。區(qū)別之處在于可以被調(diào)用。數(shù)據(jù)類型是 function(用 typeof 判斷),用 Object.prototype.toString.call() 判斷是 [object Function]。如果沒有使用 retrun 語句,則默認返回 undefined。反之則函數(shù)必須使用 return 語句來指定一個要返回的值。(使用 new 關(guān)鍵字調(diào)用一個構(gòu)造函數(shù)除外,不再是實例化一個對象)。函數(shù)執(zhí)行時,this 關(guān)鍵字并不會指向正在運行的函數(shù)本身,而是指向調(diào)用該函數(shù)的對象。 函數(shù)表達式不會提升,因此在使用之前必須先聲明。和用 var 聲明變量不一樣。

產(chǎn)生原因

箭頭函數(shù)的產(chǎn)生原因就是在于 this 關(guān)鍵字指向問題。它很容易讓人產(chǎn)生疑惑,尤其是當函數(shù)調(diào)用層級比較多的時候。和傳統(tǒng)函數(shù)定義相比,語法也相對簡潔。并且沒有自己的this,arguments,super或 new.target。這些函數(shù)表達式更適用于那些本來需要匿名函數(shù)的地方,并且它們不能用作構(gòu)造函數(shù)。箭頭函數(shù) this 指向的固定化,并不是因為函數(shù)內(nèi)部做了處理,而是因為箭頭函數(shù)在創(chuàng)建的時候根本就沒有自己的 this。

使用箭頭函數(shù)需要注意的點

1,函數(shù)體內(nèi)的 this 對象,是定義時所在對象,而不是調(diào)用該函數(shù)的對象。 2,正因為自己本身沒有 this 對象,因此不可以用作構(gòu)造函數(shù),不能用 call(),apply(),bind()這些方法去改變 this 的指向。 3,不綁定 arguments 對象,可以使用 rest 參數(shù)來解決。 4,嚴格模式(use strict)中,指定的與 this 相關(guān)的規(guī)則都將被忽略。

var aaa = () => {'use strict';console.log(this);// window }var bbb = function() {'use strict';console.log(this);// undefined } 復(fù)制代碼

5,不能使用 new 操作符,否則會報錯

var Func = () => {}; var func = new Func(); // TypeError: Func is not a constructor 復(fù)制代碼

6,沒有 prototype 屬性

var Func = () => {}; console.log(Func.prototype); // undefined 復(fù)制代碼

7,不能用作生成器。 yield 關(guān)鍵字通常不能在箭頭函數(shù)中使用(除非是嵌套在允許使用的函數(shù)內(nèi))。 8,箭頭函數(shù)的簡寫,可以直接省略 return,在塊體中,必須使用明確的 return 語句。如果需要返回對象字面量的話,記得用圓括號包起來。

var func = () => ({num: 1}); 復(fù)制代碼

寫在后面

拋一個大佬留下的問題,有箭頭函數(shù)的 IIEF:

(() => { console.log('執(zhí)行看看'); // 執(zhí)行看看 })(); 復(fù)制代碼

這個是可以的,但是下面的寫法就會報錯

(() => { console.log('執(zhí)行看看'); // Uncaught SyntaxError: Unexpected token ( }());復(fù)制代碼

有知道原因的小伙伴嗎?

轉(zhuǎn)載于:https://juejin.im/post/5b3c9872f265da0fa21a5e32

總結(jié)

以上是生活随笔為你收集整理的# 普通函数和箭头函数的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。