1、iframe 的优缺点?
优点:
1. 解决加载缓慢的第三方内容如图标和广告等的加载问题
2. Security sandbox
3. 并行加载脚本
缺点:
1. iframe 会阻塞主页面的 Onload 事件
2. 即时内容为空,加载也需要时间
3. 没有语意
2、请你谈谈 Cookie 的弊端?
缺点:
1.Cookie 数量和长度的限制。每个 domain 最多只能有 20 条 cookie,每个 cookie 长度
不能超过 4KB,否则会被截掉。
2.安全性问题。如果 cookie 被人拦截了,那人就可以取得所有的 session 信息。即使加密
也与事无补,因为拦截者并不需要知道 cookie 的意义,他只要原样转发 cookie 就可以达
到目的了。
3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保
存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
3、js 延迟加载的方式有哪些?
1. defer 和 async
2. 动态创建 DOM 方式(创建 script,插入到 DOM 中,加载完毕后 callBack)
3. 按需异步载入 js
4、documen.write 和 innerHTML 的区别?
document.write 只能重绘整个页面
innerHTML 可以重绘页面的一部分
5、哪些操作会造成内存泄漏?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引
用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象
的内存即可回收。
1. setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
2. 闭包
3. 控制台日志
4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
6、解释 jsonp 的原理,以及为什么不是真正的 ajax
动态创建 script 标签,回调函数
Ajax 是页面无刷新请求数据操作
7、javascript 的本地对象,内置对象和宿主对象
本地对象为 array obj regexp 等可以 new 实例化
内置对象为 gload Math 等不可以实例化的
宿主为浏览器自带的 document,window 等
8、字符串反转,如将 '12345678' 变成 '87654321'
思路:先将字符串转换为数组 split(),利用数组的反序函数 reverse()颠倒数组,再利用 jion() 转换为字符串
var str = '12345678'; str = str.split('').reverse().join('');
9、将数字 12345678 转化成 RMB 形式 如:12,345,678
思路:先将数字转为字符, str= str + '' ;
利用反转函数,每三位字符加一个 ','最后一位不加; re()是自定义的反转函数,最后再反转回去
function re(str) { str += ''; return str.split("").reverse().join(""); } function toRMB(num) { var tmp=''; for (var i = 1; i <= re(num).length; i++) { tmp += re(num)[i - 1]; if (i % 3 == 0 && i != re(num).length) { tmp += ','; } } return re(tmp); }
10、生成 5 个不同的随机数
思路:5 个不同的数,每生成一次就和前面的所有数字相比较,如果有相同的,则放弃当前生成的数
var num1 = []; for(var i = 0; i < 5; i++){ num1[i] = Math.floor(Math.random()*10) + 1; //范围是 [1, 10] for(var j = 0; j < i; j++){ if(num1[i] == num1[j]){ i--; } }