递归函数调用栈

递归函数也使用调用栈,下面是计算阶乘的递归函数。 def fact(x): if x==1: return 1 else: return x*fact(x-1) print fact(3) 下面详细分析调用fact(3)时调用栈是如何变化的流程图。 注意:每个fact调用都有自己的x变量,在一个函数调用中不能访问另一个x变量。...

阅读全文

JavaScript数字精度丢失问题总结

本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一、JS数字精度丢失的一些典型问题 两个简单的浮点数相加 0.1 + 0.2 != 0.3 // true 这真不是 Firebug 的问题,可以用alert试试 看看Java的运算结果 再看看Python 大整数运算 9999999999999999 == 10000000000000001 // ? 16位和17位数竟然相等,没天理啊。 又如 var x = 9007199254740992 x + 1 == x // ? 结果 三观又被颠覆了。 toFixed 不会四舍五入(Chrome) 1.335.toFixed(2) // 1.33 Firebug 线上曾经发生过 Chrome...

阅读全文

浅谈script标签的defer和async

1. 什么鬼 今天在做一个小需的时候,忽然看到前辈一句吊炸天的代码 <script src="#link("xxxx/xx/home/home.js")" type="text/javascript" async defer></script> 卧槽,竟然同时有async和defer属性,心想着肯定是前辈老司机的什么黑科技,两个一块儿肯定会发生什么神奇化学反应,于是赶紧怀着一颗崇敬的心去翻书翻文档,先复习一下各自的定义。 2. 调查一番 先看看async和defer各自的定义吧,翻开红宝书望远镜,是这么介绍的 2.1 defer 这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>...

阅读全文

前端页面操作路径可视化

为了更好地了解用户对产品的使用情况,业务中,我们经常会收到埋点统计的需求,比如: 收集一段时间内用户光标在页面中的运动情况,包括光标移动、点击等行为 统计用户滚屏行为 统计用户在站点的停留时长 收集页面链接的点击数量等 本文介绍了如何通过xpath来收集一段时间内用户光标在页面中的运动情况,包括光标移动、点击等行为 1. 什么是全(无)埋点? 首先全(无)埋点并不是完全不用写代码,而是尽可能的少写代码。开发者将SDK集成到项目中,配置并初始化SDK之后,就可以实现自动化采集用户行为数据。 2. 页面操作路径 2.1 点击操作路径 页面操作路径是指用户在当前页面都点击了什么;比如用户在当前页面先点了按钮1,然后又点了按钮2,....;这里需要注意下和用户访问路径的区别,用户访问路径指的是一次会话中,用户访问的多个页面路径。 2.2 滚动操作路径 滚动操作路径是指记录页面滚动的位置信息,以方便的统计用户在页面中从上往下滚动时,从哪儿跳出页面的几率高。 3. xpath XPath是一门在XML文档中查找信息的语言。XPath用于在XML文档中通过元素和属性进行导航。全埋点需要把点击的目标对象在页面文档结构中的xpath路径记录下来。 4. 获取xpath的js库 function ellocate...

阅读全文

前端页面停留时长统计

1. 概述 为了更好地了解用户对产品的使用情况,业务中,我们经常会收到埋点统计的需求,比如: 收集一段时间内用户光标在页面中的运动情况,包括光标移动、点击等行为 统计用户滚屏行为 统计用户在站点的停留时长 收集页面链接的点击数量等 本文讲解统计页面停留时长时,用户关闭或者跳出页面的时候,请求未发出。 2. 页面停留时长统计的思路 总体来说页面停留时长统计有两个思路: 当前页面关闭的时候统计 统计时机: unload、beforeunload事件 存在的问题: 用户关闭或者跳出页面的时候,请求未发出 当用户从浏览器切换到其他app界面或者Home屏的时候,部分浏览器默认会停止页面脚本的执行,如果在这个时候使用了unload事件,可能会让你失望,因为unload事件并不会触发,从而导致停留时长过长。针对上述提到的停留时长过长的问题,需要在统计的时候前端或者后端过滤掉时长过长的日志 跳转到新的页面后统计 统计时机:将数据传递给下跳页,在下跳页发送数据 存在的问题: 下跳页中必须部署同样的统计脚本 最后一个页面没有下跳页,关闭浏览器就需要特殊处理 3 当前页面关闭统计方案 当前页面关闭统计方案解的思路就是阻塞页面关闭,先发数据统计请求,然后再关闭页面 3.1 解决方案一: 阻塞式的...

阅读全文