网站运营需要服务器吗怎么创建网站教程
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 1return 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改变后的新的URLlet loadUrl=event.oldURL;//hash改变前的URL})
- history模式,以下是history的相关API:
history.go(-1); // 后退一页history.go(2); // 前进两页history.forward(); // 前进一页history.back(); // 后退一页//规范新增history.pushState(); // 添加新的状态到历史状态栈history.replaceState(); // 用新的状态代替当前状态history.state // 返回当前状态对象
推荐文章:https://juejin.im/post/5dae6ba1f265da5b981a8f5e