<!DOCTYPE html> <html > <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>箭頭函數</title> <style type="text/css"> html {height: 100%;} body {width: 200px;height: 100%;position: relative;padding: 0;margin: 0;} </style> </head> <body> <script src="https://cdn.bootcss.com/jquery/1.9.0/jquery.js"></script> <script> var obj = { data: ['beijing', 'shanghai'], init: function () { console.log(arguments[0].name);//xutongbao var test = () => { console.log(this.data);//["beijing", "shanghai"] console.log(arguments[0].name); //xutongbao } test(); } } obj.init({name: 'xutongbao'}); var test = () => { console.log(arguments); //未定義 ReferenceError: arguments is not defined } test({name: 'xutongbao'}); </script> </body> </html>
因爲this
在箭頭函數中已經按照詞法做用域綁定了,因此,用call()
或者apply()
調用箭頭函數時,沒法對this
進行綁定,即傳入的第一個參數被忽略:css
<!DOCTYPE html> <html > <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>箭頭函數</title> <style type="text/css"> </style> </head> <body> <script src="https://cdn.bootcss.com/jquery/1.9.0/jquery.js"></script> <script> var obj = { birth: 1990, getAge: function (year) { var b = this.birth; // 1990 var fn = (y) => y - this.birth; // this.birth還是1990 return fn.call({birth:2000}, year); } }; var age = obj.getAge(2018); // 28 console.log(28) </script> </body> </html>