前言
本文用于總結(jié)個(gè)人在工作期間總結(jié)的一些面試題
題目列表
- js的函數(shù)聲明
// 題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)
// 請(qǐng)不要先看答案講解捐川,可以先自己試試
// 這4個(gè)題考的是變量聲明以及函數(shù)聲明和變量賦值的先后順序。
// 同一個(gè)標(biāo)識(shí)符的情況下概而,變量聲明與函數(shù)聲明都會(huì)提升银舱;函數(shù)聲明會(huì)覆蓋變量聲明慷荔,
// 但不會(huì)覆蓋變量賦值膀钠,即:如果聲明變量的同時(shí)初始化或賦值那么變量?jī)?yōu)先級(jí)高于函數(shù)杖刷。
// 題1:
// 執(zhí)行會(huì)報(bào)錯(cuò),提示foo未定義靶擦,因?yàn)闆]有通過var來進(jìn)行變量提升聲明腮考,所以不是undefined
// 題2:
// 執(zhí)行獲得undefined雇毫,通過var提升了變量玄捕,進(jìn)行了聲明,但是賦值在log之后
// 題3:
// 執(zhí)行獲得1棚放,不是2枚粘,因?yàn)閳?zhí)行了bar(),里層有函數(shù)聲明的foo飘蚯,那么就不需要到外層找聲明了馍迄,然后里面的函數(shù)聲明的foo就會(huì)被
// 替換成2,你可以在題3的function foo(){}后面增加代碼console.log('里面'+foo)查看局骤,由于bar()修改了里面的foo攀圈,
// 外層的foo不受影響,所以輸出1
// 題4:
// 執(zhí)行獲得2峦甩,return會(huì)將里面的foo值帶到外層赘来,外層的foo收到影響现喳,從而值改變?yōu)?。
// 但如果你把修改下bar里面的方法: foo = 2;function foo(){}; return; 你會(huì)發(fā)現(xiàn)執(zhí)行結(jié)果為1犬辰,是的這個(gè)和題3其實(shí)是一樣的嗦篱。
js的原型鏈
js的閉包
js的Promise,async
cookie的安全設(shè)置:secure屬性設(shè)置為true幌缝,只允許https連接時(shí)會(huì)被攜帶訪問服務(wù)端灸促,http連接時(shí)服務(wù)端無法獲取到cookie;
HttpOnly
設(shè)置時(shí)js涵卵,applet等無法獲取到cookie浴栽,用于防止xxs攻擊;X-Frame-Options
響應(yīng)頭轿偎,有三個(gè)屬性:DENY :該頁(yè)面不允許在 frame 中展示吃度,即便是在相同域名的頁(yè)面中嵌套也不允許。 SAMEORIGIN :該頁(yè)面可在相同域名頁(yè)面的 frame 中展示贴硫。 ALLOW-FROM uri:該頁(yè)面可在指定來源的 frame 中展示椿每。