1 如何判断当前脚本运行在浏览器还是node环境中?
this === window ? 'browers':'node';
通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中。
2 移动端的点击事件的有延迟,事件是多久,为什么会有?怎么解决这个延时?
移动端点击有300ms的延迟是因为移动端会有双击缩放的这个操作,因此浏览器在click之后要等待300ms,看用户有没有下一次点击,来判断这次操作是不是双击。
有三种办法来解决这个问题
- 通过meta标签禁用网页的缩放
- 通过meta标签将网页的viewport设置为ideal viewport。
- 调用一些js库,不如FastClick
click延时问题还可能引起点击穿透的问题,就是如果我们在一个元素上注册了touchStart的监听事件,这个事件会将这个元素隐藏掉,我们发现当这个元素隐藏后,触发了这个元素下的一个元素的点击事件,这就是点击穿透。
3 JavaScript中的作用域与变量声明提升?
变量提升的表现是,无论我们在函数中何处位置声明的变量,好像都被提升到了函数的首部,我们可以再变量声明前访问到而不会报错
造成变量声明提升的本质原因是js引擎在代码执行前有一个解析的过程,创建了执行上下文,初始化了一些代码执行时需要用到的对象。当我们访问一个变量时,我们会到当前执行上下文中的作用域链中去查找,而作用域链的首端指向的是当前执行上下文的变量对象,这个变量对象是执行上下文的一个属性,它包含了函数的形参、所有的函数和变量声明,这个对象的实在代码解析的时候创建的。这就是会出现变量声明提升的根本原因。
4 [, , ,]的长度?
尾后