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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript箭头函数和this的指向问题

發布時間:2024/9/30 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript箭头函数和this的指向问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

箭頭函數

下面兩代碼等價:

const fun1 = function(x){ return x*x;}const fun = x => x*x;

function換成=>,放在參數和函數體中間

注意:如果沒有參數,或有多個參數,需要使用()來定義參數列表
如果有一個參數,可以不()
如果函數體中只有一條語句,可以不用{}

排序:

let arr = [1,5,2,34,22]; let narr = arr.sort(function(a,b){ return a-b;}); console.log(narr);

也可以換成:

let narr = arr.sort((a,b)=>a - b); //省略了{}

運行:

1.如果箭頭函數返回對象時,一定要在對象外邊加上小括號

<script>const fun = id =>({id:id,namee:'Hang三'});console.log(fun(10))</script>

運行結果:

this的指向

  • 普通函數的this:指向它的調用者,如果沒有調用者則默認指向window.
  • 箭頭函數的this:指向箭頭函數定義時所處的對象,而不是箭頭函數使用時所在的對象,默認使用父級的this
  • 綜上,箭頭函數沒有自己的this,它的this是繼承而來,默認指向在定義它時所處的對象
  • 代碼塊多于一條語句,就用大括號括起來,并且用return返回
  • 箭頭函數能夠簡化回調函數

點擊塊的背景顏色后變色,用普通函數實現:

<!DOCTYPE html> <html> <head><meta charset="utf-8"><title></title><style>#box{width: 100px;height: 50px;background: red;}#box.bgcolor{background:teal;}</style> </head> <body> <div id = "box"></div> </body> <script>const box = document.getElementById('box');box.onclick = function(){this.className = 'bgcolor';} </script></html>

效果:

點擊紅色的之后:

用箭頭函數:(加延遲函數setTimeOut)

const box = document.getElementById('box'); box.onclick = function () {setTimeout(() => {console.log(this);this.className = 'bgcolor';}, 3000); }

由這個箭頭函數的this的用法也可以知道箭頭函數中的this并不是誰調用這個方法就代表哪個對象,而是在它所聲明的位置的父級對象

goods = [11,2,43,21,4]; let good1 = good.filter(function(n) {return n >=10 ;}) let good2 = good1.map(function(n) {return n*0.5;}) let sum = good2.reduce(function(s,n){return s+n;},0);

上面的函數轉化成鉤子函數寫可以簡化為:

goods = [11,2,43,21,4]; let sum = goods.filter(n =>n >= 10).map(n => n*0.5).reduce((s,n)=>s+n);

map filter reduce方法

其中:
map()方法定義在JavaScript的Array中,它返回一個新的數組,數組中的元素為原始數組調用函數處理后的值。

1.map方法
注意:

map()不會對空數組進行檢測

map()不會改變原始數組

語法:
array.map(function(currentValue, index, arr), thisIndex)
參數說明:

function(currentValue, index, arr):必須。為一個函數,數組中的每個元素都會執行這個函數。其中函數參數:

currentValue:必須。當前元素的的值。

index:可選。當前元素的索引。

arr:可選。當前元素屬于的數組對象。

thisValue:可選。對象作為該執行回調時使用,傳遞給函數,用作"this"的值。

2.reduce方法:
reduce() 方法
實例
計算數組元素相加后的總和:

var numbers = [65, 44, 12, 4];function getSum(total, num) {return total + num; } function myFunction(item) {document.getElementById("demo").innerHTML = numbers.reduce(getSum); }

輸出結果:

125
reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。

reduce() 可以作為一個高階函數,用于函數的 compose。

注意: reduce() 對于空數組是不會執行回調函數的。

語法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
function(total,currentValue, index,arr) 必需。用于執行每個數組元素的函數。
initialValue 可選。傳遞給函數的初始值
3.JavaScript Array filter() 方法

返回數組 ages 中所有元素都大于 18 的元素:

var ages = [32, 33, 16, 40];function checkAdult(age) {return age >= 18; }function myFunction() {document.getElementById("demo").innerHTML = ages.filter(checkAdult); }

輸出結果為:

32,33,40

filter() 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。

注意: filter() 不會對空數組進行檢測。

注意: filter() 不會改變原始數組。
語法
array.filter(function(currentValue,index,arr), thisValue)
function(currentValue, index,arr) 必須。函數,數組中的每個元素都會執行這個函數
thisValue 可選。對象作為該執行回調時使用,傳遞給函數,用作 “this” 的值。
如果省略了 thisValue ,“this” 的值為 “undefined”

總結

以上是生活随笔為你收集整理的javascript箭头函数和this的指向问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。