js幾種常見的遞歸方法
遞歸的概念:就是函數調用函數本身,或者在自己函數調用的下級調用函數自己;
- 案例1:求和,1-100
function sun(n){ if(n==1) return 1 }
- 案例2:遞歸方法1,1,2,3,5,8,13,21,34,55,89…求第 n 項
function fib(n) { if (n === 1 || n === 2) return 1 return fib(n - 2) + fib(n - 1) } console.log(fib(3))
- 案例3:深拷貝
function clone(o) { var temp = {} for (var key in o) { if (typeof o[key] == 'object') { temp[key] = clone(o[key]) } else { temp[key] = o[key] } } return temp }
- 案例4:遞歸組件
- 組件在它的模板內可以遞歸的調用自己,只要給組件設置 name 組件就可以了。
- 不過需要注意的是,必須給一個條件來限制數量,否則會拋出錯誤:
max stack size exceeded
- 組件遞歸用來開發一些具體有未知層級關係的獨立組件。比如:聯級選擇器和樹形控件
function clone(o) { var temp = {} for (var key in o) { if (typeof o[key] == 'object') { temp[key] = clone(o[key]) } else { temp[key] = o[key] } } return temp }
hash模式和history模式
- 這裏的hash指的就是url後的 # 號以及後面的支付,比如說:
www.baidu.com/#hashhash
,其中#hashhash
就是我們期望的 hash值,
由於hash值的變化不會導致瀏覽器向服務器發送請求,而且在hash的改變會觸發hashchange
事件,瀏覽器的前進後退也能對其進行控制,所以在H5的history模式出現之前,基本都是使用hash模式來實現前端路由,代碼如下window.addEventListener('hashchange',function(event){ let newUrl=event.newURL;//hash改變後的新的URL let loadUrl=event.oldURL;//hash改變前的URL })
- history模式,以下是history的相關API:
history.go(-1); // 後退一頁 history.go(2); // 前進兩頁 history.forward(); // 前進一頁 history.back(); // 後退一頁 //規範新增 history.pushState(); // 添加新的狀態到歷史狀態棧 history.replaceState(); // 用新的狀態代替當前狀態 history.state // 返回當前狀態對象