前言
本文用于总结个人在工作期间总结的一些面试题
题目列表
- js的函数声明
// 题1
function bar(){
console.log(foo);
foo = 2
}
bar();
// 题2
function bar(){
console.log(foo);
var foo = 2;
}
bar();
// 题3
var foo = 1;
function bar() {
foo = 2;
function foo() {}
}
bar();
console.log(foo)
// 题4
var foo = 1;
function bar() {
foo = 2;
return function foo() {}
};
bar();
console.log(foo)
// 请不要先看答案讲解,可以先自己试试
// 这4个题考的是变量声明以及函数声明和变量赋值的先后顺序。
// 同一个标识符的情况下,变量声明与函数声明都会提升;函数声明会覆盖变量声明,
// 但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值那么变量优先级高于函数。
// 题1:
// 执行会报错,提示foo未定义,因为没有通过var来进行变量提升声明,所以不是undefined
// 题2:
// 执行获得undefined,通过var提升了变量,进行了声明,但是赋值在log之后
// 题3:
// 执行获得1,不是2,因为执行了bar(),里层有函数声明的foo,那么就不需要到外层找声明了,然后里面的函数声明的foo就会被
// 替换成2,你可以在题3的function foo(){}后面增加代码console.log('里面'+foo)查看,由于bar()修改了里面的foo,
// 外层的foo不受影响,所以输出1
// 题4:
// 执行获得2,return会将里面的foo值带到外层,外层的foo收到影响,从而值改变为1。
// 但如果你把修改下bar里面的方法: foo = 2;function foo(){}; return; 你会发现执行结果为1,是的这个和题3其实是一样的。
-
js的原型链
-
js的闭包
-
js的Promise,async
-
cookie的安全设置:secure属性设置为true,只允许https连接时会被携带访问服务端,http连接时服务端无法获取到cookie;
HttpOnly
设置时js,applet等无法获取到cookie,用于防止xxs攻击;X-Frame-Options
响应头,有三个属性:DENY :该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN :该页面可在相同域名页面的 frame 中展示。 ALLOW-FROM uri:该页面可在指定来源的 frame 中展示。
网友评论