常见的前端面试题(1)
1.简述一下你对HTML语义化的理解
HTML语义化可以说是用正确的标签做正确的事情。html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;即使在没有css样式的情况下也以一种文档格式显示,并且是容易阅读的;搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于seo;使阅读源代码的人更容易将网站分块,便于阅读维护理解。
2.简述一下cookies,sessionStorage和localStorage的区别
cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。cookie数据始终在同源的http请求中携带,会在浏览器和服务器之间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
存储大小:
cookie数据大小不能超过4k。
sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大的多,可以达到5M或更大。
有效期限:
localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据。sessionStorage数据在当前浏览器窗口关闭后自动删除。cookie设置的cookie过期时间一直有效,即使窗口或浏览器关闭
3.谈谈对this的理解
this总是指向函数的直接调用者,也就是说谁调用指向谁。如果有new关键字,this指向new出来的那个对象;在事件中,this指向触发这个事件的对象,特殊的是,IE中attachEvent中的this总是指向全局对象window。
4.eval是什么
它的功能是把对应的字符串解析成JS代码并运行;应该避免使用eval,一是因为不安全,二是非常耗性能(2次,一次解析成js语句,一次执行)。可以在ajax后台传来json字符串时使用它转换为JSON对象。var obj = eval('('+str+')')。
5.事件是什么?IE与火狐的事件机制有什么区别?如何阻止冒泡?
我们在网页中的某个操作(有的操作对应对个事件)。例如,当我们点击一个按钮就会产生一个事件。是可以被JS侦测到的行为。事件处理机制:IE是事件冒泡,火狐同时支持两种事件模型,也就是:捕获型事件和冒泡型事件。阻止冒泡的方法:非IE是ev.stopPropagation()。IE是方法ev.cancelBubble = true;
6.二维数组求和
7.闭包
闭包就是能够读取其他函数内部变量的函数。在javascript中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成‘定义在一个函数内部的函数’。
作用 1.可以读取函数内部的变量;2.让这些变量的值始终保持在内存中
使用闭包的注意点:
1.闭包会使得变量一直存在内存中,内存消耗大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中会导致内存的泄露,解决办法是 在退出函数之前,将不使用的局部变量全部删除。
2.闭包会在父函数的外部,改变父函数的值。所以,如果你把父函数当作对象使用,把闭包当作它的公用的方法,把内部变量当作它的私有属性,这时要注意,不要随便的改变父函数内部变量的值。