setTimeout是异步调用的,且延迟两秒执行,因此等到setTimeout执行的时候,这个时候i
的值已经变成了4,因此循环四次就会输出4个4。
以上是个人的理解,这里有更详细的介绍:
的原型,因此C返回false;因为NaN与任何值都不相等,包括NaN本身,因此D返回false
- 这题考察的是局部变量跟全局变量的内容,第一段代码,只是将
one
的值传给函数ha
,并赋值给函数局部变量ha_val
,因此ha_val
变量的值改变,不会影响变量one
的值,所以最后输出的值是1。
changeVal_1
的是对象two
,而不是仅仅传了two
的值,因此改变的是对象two
的值;而传给函数changeVal_2
的是two.val
的值,改变它的值,不会改变对象two
的值,因此最后输出的值是2。
6.ajax的同步请求跟异步请求的区别是什么?
同步请求:当执行当前ajax的时候会停止执行后面的JS代码,直到ajax执行完毕后时,才能继续执行后面的JS代码。
异步请求:当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)
7.用javascript写一个一秒的定时任务,一秒之后弹出弹窗,内容是“你好”
// 我当时的做法是这样的
结束后去网上看看有没有更好的方法,发现网上大部分是直接用setTimeout的,看来是我想太多了?
8.说说对前端工程化的理解
- 使用软件工程的技术和方法来进行前端项目的开发、维护和管理
- 所有能降低成本,并且能提高效率的事情的总称为工程化
- 软件工程化关注的是性能、稳定性、可用性、可维护性等方面,一切以这些为目标的工作都是"前端工程化"
前端工程化分为这四个部分:规范化,自动化,模块化,组件化。
下面是一些详细解析上面四个部分内容的参考文章:
9.下面的代码最终的结果会输入什么?
原因是:fanshu是Test的实例,当调用fanshu.b()时,会先在实例上查找有没有b属性,发现有对应的b属性,因此不会继续往上查找,因此弹出的值是0;当调用fanshu.c时,在实例没有查找到对应的属性,因此继续在原型对象上查找,查找到对应的c属性, c属性是一个立即执行的函数,因此可以直接执行,弹出值20。
10.事件委托的优点,如何优化?
优点:1.减少事件处理程序的绑定,节省内存;2.减少dom节点操作,提高性能
优化:1.降低层级,把事件绑定在低层级的元素上,不在body元素或者document上绑定;2.即使是用事件委托,也要减少绑定的次数。
11.用javaScript写一个用来替换replace方法的方法,替换掉下面的字符串
额外思考:type的顺序可以跟字符串里面的变量顺序不一致,以及字符串的变量不一定存在于type中。
后来跟朋友讨论了下,发现还可以用递归+substring的方法: