1. 程式人生 > >箭頭函數及this指向問題

箭頭函數及this指向問題

span 上下 turn UNC symbol not === 執行 ech

function sy() {
                x = 511
                console.log(‘sy是個萌妹‘)
            }
            let fc = new sy();
            //箭頭函數是匿名函數,不能作為構造函數,不能使用new,但是上面的普通的函數是可以的 構造函數首字母一般大寫     var array = new Array();
            //構造函數和實例化對象 :https://www.cnblogs.com/mylove103104/p/4590715.html
            //https://www.cnblogs.com/Home-Yzz/p/8495826.html
console.log(fc) console.log(sy(), x) let fun = () => { return 5 } console.log(fun()) function A(a) { console.log(arguments); } A(1, 2, 3, 4, 5, 8); // [1, 2, 3, 4, 5, 8, callee: ?, Symbol(Symbol.iterator): ?]
let B = (rest) => { //箭頭函數不綁定arguments,取而代之用rest參數...解決 console.log(rest); } B(2, 92, 32, 32); // Uncaught ReferenceError: arguments is not defined let C = (...c) => { console.log(c); } C(
3, 82, 32, 11323); // [3, 82, 32, 11323] var obj = { //箭頭函數不綁定this,會捕獲其所在的上下文的this值,作為自己的this值 a: 10, b: () => { console.log(this.a); // undefined console.log(this); // Window {postMessage: ?, blur: ?, focus: ?, close: ?, frames: Window, …} }, c: function() { console.log(this.a); // 10 console.log(this); // {a: 10, b: ?, c: ?} } } obj.b(); obj.c(); var obj = { a: 10, b: function() { console.log(this.a); //10 }, c: function() { return() => { console.log(this.a); //10 } } } obj.b(); obj.c()(); function A_() { function B_() { console.log(‘Hello Closure!‘); } return B_; } var C_ = A_()(); // Hello Closure! //閉包 https://www.cnblogs.com/yunfeifei/p/4019504.html //https://www.cnblogs.com/onepixel/p/5062456.html 多看這個,這個大佬牛逼 (function(document) { var viewport; var obj = { init: function(id) { viewport = document.querySelector(‘#‘ + id); }, addChild: function(child) { viewport.appendChild(child); }, removeChild: function(child) { viewport.removeChild(child); } } window.jView = obj; console.log(window.jView) // obj 是在函數 f 中定義的一個對象,這個對象中定義了一系列方法, 執行window.jView = obj 就是在 window 全局對象定義了一個變量 jView, //並將這個變量指向 obj 對象,即全局變量 jView 引用了 obj . 而 obj 對象中的函數又引用了函數 f 中的變量 viewport ,因此函數 f 中的 viewport 不會被 GC 回收, //viewport 會一直保存到內存中,所以這種寫法滿足了閉包的條件 })(document); (function() { console.log(this) //window 一看就是非嚴格模式 })(document) //document是window下掛載的一個屬性===這裏應該是理解為調用本身這個函數 function f2() { "use strict"; // 這裏是嚴格模式 console.log(this) } f2(); let go = () => { console.log(this) //當然在匿名函數也是指向window } go() //https://www.cnblogs.com/dongcanliang/p/7054176.html 箭頭函數this 的使用

敲代碼實踐出真知,代碼裏面有借鑒的鏈接,可以看一看。

箭頭函數及this指向問題