這篇文章主要介紹了關於如何解決vue中methods中的方法閉包快取的問題,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
在路由的導覽列中需要, 判斷是否為第一次點選
需要一個標誌位元來記錄是否點擊過
#現況:
這個標誌位元只在一個函數中用過.不希望存放全域
希望在這個methods中形成閉包, 用來快取這個函數
做出如下嘗試後, 發現可以實作.
目前問題:
// 测试使用: <p> <button>测试按钮</button> </p> <script> var app = new Vue({ el: '#app', methods: { test: (() => { `use strict` console.log(this) // Window var flag = true return () => { console.log(this) // Window flag = false } })() } }) </script>
undefined
debugger之後, 我們一步步來看
pointJump: (() => { let isFirstChanged = false; console.log(this); debugger; return entry => { console.log(this); console.log(isFirstChanged); debugger; isFirstChanged = true; }; })(),
此時debugger顯示記憶體中為Vue的頂級物件, 而在控制台列印出來的依舊是undefined
this所代表的空間還是
undefined, 所以沒有能改變過來.
<script> var app = new Vue({ el: '#app', methods: { test: (() => { `use strict` console.log(this) // Window var flag = true return () => { console.log(this) // Window flag = false } })() } }) </script>
const test = (() => { let aaa = true; return function () { console.log(this); aaa = false; }; })(); mainJump(entry) { test.call(this); },
##形成閉包傳回的函數中, 不要使用箭頭函數, 使用function定義即可
###在閉包中返回函數, 快取變數時, 使用function進行傳回函數的定義.#### ########以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網! ######相關推薦:#########Vue2.0自訂指令與實例的屬性與方法############Vue中父子元件間的通訊# ##############Vue中eventbus的解析#########以上是如何解決vue中methods中的方法閉包快取的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!