前端面试每日3+2(第16天)
冰洋 12/17/2019 每日3+2
当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!
鲁迅说过:
答案仅供参考...
# 1、简单介绍下Javascript(浏览器)的同源策略?
解析:
是什么?
- 浏览器限制了从同一个源加载的文档或者脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的机制。
- 另外,同源策略又分两种:
- DOM同源策略:禁止不同源页面DOM进行操作,具体体现在iframe跨域的情况,不同域名的iframe是限制互相访问的。
- XMLHttpRequest同源策略:禁止使用XHR对象向不同源的服务器发起HTTP请求
- 注意:脚本本身的来源并不作为判断同源的依据,而生将脚本所属的来源作为依据。 为什么?
JS可以操作web文档的内容,如果没有DOM同源策略限制不同源的脚本或文档,保证web网站的安全 ,防止跨站攻击,很危险;
如何判断?
- 判断脚本的来源:例如 文档A通过script的src引用了一个外部脚本,这个脚本是google提供的,也是goole的服务器主机加载到A文档的,这个脚本所属文档是谁呢?答案是文档A。
- 判断是否是同源:协议、域名、端口都相同
# 2、事件绑定和普通事件有什么区别?
解析:
事件绑定是指把事件注册到具体DOM上,
事件绑定栗子:
domDiv.addEventListener('click',function(){
// 事件处理函数
})
1
2
3
2
3
普通事件是指用来注册的事件
普通事件栗子:
domDiv.onClick = function(){
// 事件处理函数
}
1
2
3
2
3
区别:在同一个元素上绑定多个相同的事件类型时,对于事件绑定来说可以绑定多个事件函数;如果是普通事件后绑定的事件会覆盖前面绑定的事件。
# 3、怎么判断一个变量是否为null还是undefined?
解析:
undefined:
if(typeof val == 'undefined'){
alert('is undefined)
}
1
2
3
2
3
null:
var exp = null
if(!exp && typeof exp != 'undefined' && exp != 0){
alert('is null)
}
1
2
3
4
2
3
4
# 4、Javascript中callee和caller的区别?
解析:
caller是返回一个对函数的引用,该函数调用了当前函数;
function a(){
b();
}
function b(){
alert(b.caller);
}
a(); // 结果返回的是弹窗函数a的内容
1
2
3
4
5
6
7
2
3
4
5
6
7
callee返回的是正在被执行的function函数,也就是所指定的function对象的正文。
注意:es5严格模式禁止使用,后面也不建议使用了 mdn链接 (opens new window)
// 先来一个阶乘函数
// 用到了递归,如果该函数名改变了,里面的函数名也需要改变,就很不方便
function Aaa(){
if(n<=1){
return 1
}else{
return n*Aaa(n-1)
}
}
// 用callee试试:
function Bbb(){
if(n<=1){
return 1
}else{
return n*arguments.callee(n-1)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 5、"=="和“===”的区别?
解析:
'=='会判断值是否相等,会自动转换类型;
'==='会判断值和类型是否相等,不会自动转换类型