好程序員web前端教程分享JavaScript面試題
成都創(chuàng)新互聯(lián)公司主營臨邑網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,臨邑h5小程序制作搭建,臨邑網(wǎng)站營銷推廣歡迎臨邑等地區(qū)企業(yè)咨詢
1、JavaScript this指針、閉包、作用域
this:指向調(diào)用上下文
閉包:內(nèi)層作用域可以訪問外層作用域的變量
作用域:定義一個函數(shù)就開辟了一個局部作用域,整個js執(zhí)行環(huán)境有一個全局作用域
2、JavaScript的同源策略
一段腳本只能讀取來自于同一來源的窗口和文檔的屬性,這里的同一來源指的是主機名、協(xié)議和端口號的組合
http,ftp:協(xié)議
主機名;localhost
端口名:80:http協(xié)議的默認端口
https:默認端口是8083
同源策略帶來的麻煩:ajax在不同域名下的請求無法實現(xiàn),
如果說想要請求其他來源的js文件,或者json數(shù)據(jù),那么可以通過jsonp來解決
3、看下列代碼,輸出什么?解釋原因
var undefined;//此時undefined這個變量的值是undefined
undefined == null; // true
1 == true; // true
此時會把布爾類型的值轉(zhuǎn)換為數(shù)字類型?true=1 false=0
2 == true; // false
0 == false; // true
0 == ''; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true
undefined與null相等,但不恒等(===)
一個是number一個是string時,會嘗試將string轉(zhuǎn)換為number
嘗試將boolean轉(zhuǎn)換為number,0或1
嘗試將Object轉(zhuǎn)換成number或string,取決于另外一個對比量的類型
所以,對于0、空字符串的判斷,建議使用 “===” ?!?==”會先判斷兩邊的值類型,類型不匹配時為false。
4、請你談?wù)凜ookie的弊端
1.`Cookie`數(shù)量和長度的限制。每個domain最多只能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。
2.安全性問題。如果cookie被人攔截了,那人就可以取得所有的session信息。即使加密也與事無補,因為攔截者并不需要知道cookie的意義,他只 要原樣轉(zhuǎn)發(fā)cookie就可以達到目的了。
3.有些狀態(tài)不可能保存在客戶端。例如,為了防止重復(fù)提交表單,我們需要在服務(wù)器端保存一個計數(shù)器。如果我們把這個計數(shù)器保存在客戶端,那么 它起不到任何作用。
5、哪些操作會造成內(nèi)存泄漏?
內(nèi)存泄漏指任何對象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對象,并計算引用了每個對象的其他對象的數(shù)量。如果一個對象的引用數(shù)量為0(沒有其他對象引用過該對象),或?qū)υ搶ο蟮?惟一引用是循環(huán)的,那么該對象的內(nèi)存即可回收。
1. setTimeout 的第一個參數(shù)使用字符串而非函數(shù)的話,會引發(fā)內(nèi)存泄漏。
2. 閉包
3. 控制臺日志
4. 循環(huán)(在兩個對象彼此引用且彼此保留時,就會產(chǎn)生一個循環(huán))
6、輸出多少?
var a = 6;
setTimeout(function () {
var a = 666;//由于變量a是一個局部變量
alert(a); // 輸出666,
}, 1000);
a = 66;
因為var a = 666;定義了局部變量a,并且賦值為666,根據(jù)變量作用域鏈,
全局變量處在作用域末端,優(yōu)先訪問了局部變量,從而覆蓋了全局變量。
var a = 6;
setTimeout(function () {
//變量聲明提前
alert(a); // 輸出undefined
var a = 666;
}, 1000);
a = 66;
因為var a = 666;定義了局部變量a,同樣覆蓋了全局變量,但是在alert(a);之前
a并未賦值,所以輸出undefined。
?