1. 程式人生 > >ES6:箭頭函式

ES6:箭頭函式

    作用: 定義匿名函式     基本語法:          沒有引數: () => console.log('xxx')         一個引數: (i) => i+2         大於一個引數: (i,j) => i+j         函式體不用大括號: 預設返回結果         函式體如果有多個語句,需要用{}包圍,若有需要返回的內容,需要手動返回     使用場景:多用來定義回撥函式     箭頭函式的特點:         1 簡潔         2 箭頭函式沒有自己的this,箭頭函式的this不是呼叫的時候決定的,而是在定義的時候處在的物件就是它的this         3 擴充套件理解: 箭頭函式的this看外層的是否有函式                     如果有,外層函式的this就是箭頭函式的this                     如果沒有,則this就是window

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>箭頭函式</title>
</head>
<body>
	<button id="btn1">測試箭頭函式this_1</button>
	<button id="btn2">測試箭頭函式this_2</button>
	
		
</body>
<script type="text/javascript">
	let fun = () => console.log('I am arrow function!')
	fun()

	// 形參的情況
	// 1.沒有形參 ()不能省略
	let fun1 = () => console.log('I am arrow function!')
	fun1();
	// 2. 只要一個形參 ()可以省略
	let fun2 = a => console.log(a)
	fun2('yoona')
	// 3. 兩個及兩個以上
	let fun3 = (x,y) => console.log(x,y)
	fun3(1,2)

	// 函式體的情況
	// 1.只有一條語句或者表示式 {}可以省略---會自動返回語句執行的結果或表示式的結果
	// let fun4 = (x,y) => x+y  // 5
	let fun4 = (x,y) => {x+y}  // undefined
	console.log(fun4(2,3))
	// 1.不止一條語句或者表示式 {}不可以省略
	let fun5 = (x,y) => {
		console.log(x,y)
		return x+y
	}
	console.log(fun5(10,20))


	// 測試箭頭函式的this
	let btn1 = document.getElementById('btn1')
	let btn2 = document.getElementById('btn2')
	btn1.onclick = function(){// 常規函式
		console.log(this)// <button id="btn1">測試箭頭函式this_1</button>
	};
	btn2.onclick = () => console.log(this)// window  此時箭頭函式是在全域性寫的 所處物件為window


	// let obj = {
	// 	name : 'Yoona',
	// 	getName(){
	// 		console.log(this) // this指向obj
	// 		btn2.onclick = () => console.log(this) // this指向obj 跟外層函式一樣
	// 	}
	// }
	// obj.getName()

	let obj = {
		name : 'Yoona',
		getName: () => {
			console.log(this) // this指向window 因為getName也是箭頭函式 其外層沒有函式
			btn2.onclick = () => console.log(this) // this指向window 跟外層函式一樣
		}
	}
	obj.getName()





	
</script>
</html>