var a =var b =a
a.x = a =
console.log(a.n, b.n) //2 1
console.log(a.x, b.x) //undefined
這是一道經典面試題,看似簡單,其實暗藏玄機。
至於物件賦值位址大家應該早已知道
關鍵在於第三句 a.x = a = 考察了兩個基本點 :1點語法和=語法的優先順序2連等的賦值操作
分析:點語法比賦值優先順序高,所以先執行點語法然後執行賦值,單純你的以為a.x的點語法和離他最近的賦值=比較嗎?(產生這想法的原因是大家都知道連等是從右往左賦值的,右邊的等號在賦值的時候我a.x完全可以不用動)是連等的兩個賦值等號比較,所以在a= 之前就已經在a的空間裡建立了乙個x,並不是a=之後才去建立。
詳細的js連等介紹:
var x = 10function
fn()
function
show(f)
show(fn) //10
這道題從show(fn)來看,找到show函式傳了乙個fn函式,並執行fn,然後跟蹤到fn的函式體,是要列印x
問題來了?列印的是全域性的x還是show裡面的x。乍一看因為執行fn的時候是在show裡面呼叫的所以列印了20,實際上函式不管在哪呼叫,都要返回他原本宣告的地方去執行,因為把函式當做實參傳進去就是傳的位址,如果是用arguments就是傳的函式內容。
var fn = function() fn() // fn函式體
var obj =
}obj.fn2()
fn()列印比較簡單,就是列印自己本身這個函式體
obj.fn2()呼叫了obj的方法,那麼fn2中的this指向誰?在簡單定義的物件中,方法中的this指向當前物件,非方法中的this指向window,所以列印的fn2函式體
var c = 1;function
c(c)
console.log(c); //1
c(2); //
c is not a function
本題考查預解析:函式宣告比var宣告的更要前(本題沒有用到,主要用到變數名提公升在原地賦值),所以c早已變成1
var name = 'world!';(function
()
else
})() // jack
本題考查函式自呼叫。再次強調一點,在js執行的預解析階段只要有var 宣告就要變數提前(千萬別以為if是條件所以可能不在執行語句中,預解析還沒執行呢,只是解析)
var a = 6settimeout(function
() , 0)
console.log(1)
a = 66
本題考查主線程和非同步的執行順序,顯然是主線程先執行,所以彈出66
functiona ()
a.prototype.n = 1
var b = new
a() a.prototype =
var c = new
a() console.log(b.n, b.m, c.n, c.m) // 1 undefined 2 3
本題考查的是先new 再改原型,之前new的例項會不會受影響(原理還是位址指向問題)
var f = function(){}
object.prototype.a = function
() function.prototype.b = function
()
var f = new
f() f.a()
//a()
f.b() //
b() f.a() //
a() f.b() //
f.b is not a function
此題考查對函式也是物件在原型鏈上的提現:首先定義了乙個函式f,相當於例項了乙個函式即f.__proto__ === function.prototype,function.prototype === object.prototype。
最後,考查沿著原型鏈查詢,找不到返回undefined。
f.a()找到頂層objecet,prototype上的方法,f.b()找到function.prototype的方法
f.a()找到頂層objecet,prototype上的方法(f也是乙個物件所以頂層還是objecet,prototype) ,但是f.b()在原型上找不到,注意此時f的原型不是function.prototype,而是f.prototype,而頂層object.prototype也找不到b方法所以報錯
經典面試題
1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...
經典面試題
我的老同學現在富得流油。他開創了乙個軟體公司,開發了一系列軟體,生意越做越大。今天他來到這個城市後馬上打 給我。是我啊!聽出來了嗎?是這樣的,我到這兒的大學招畢業生,要在這兒呆上五天,咱哥們趁這個時間好好聚一聚。我做東!既然他要做東,我理所當然順水推舟。人家是老闆,不吃白不吃!我來到他下榻的賓館,看...
經典面試題
分兩個情況 perfork模式 worker模式 前者程序模式 後者執行緒模式 故檢視方法也有區別 oldboy.log 參考 分析 此類問題是運維工作中最常見的問題。可以演變成分析日誌,檢視tcp各個狀態連線數,檢視單ip連線數排名等等 第一類 過濾網域名稱方法 方法很多 這裡給出六種為例。還可以...