蠻考驗基礎的JS筆試題(有坑小心!)

2022-07-09 07:42:08 字數 2004 閱讀 3524

1.  考察this

1

var length = 10

2function

fn()

5var obj =11}

12 obj.method(fn)

這裡的坑主要是arguments,我們知道取物件屬於除了點操作符還可以用中括號,這裡fn的scope是arguments,即fn內的this===arguments,呼叫時僅傳了乙個引數fn,因此length為1。

2. 函式表示式具名(函式宣告同時賦值給另乙個變數)或函式宣告立即執行時,名僅在該函式內可訪問

1 ~function

() ()

6 }()

外層匿名函式自執行,列印next,接著內層具名函式自執行。會發現具名的next僅在其自身函式體內可訪問,即輸出為function。外面是不可見的,typeof就為undefined了。(注:此題ie6/7/8中輸出為function function, 標準瀏覽器為undefined function)

同樣的情況也發生在將具名函式賦值給乙個變數時,如下:

1

var func = function

a()

4 func() //

?5 alert(typeof a) //

?

這條規則是標準中(es3/es5)都已明確指出,但ie6、7、8沒有嚴格遵從。可參見w3help的分析或李松峰老師的翻譯《命名函式表示式探秘》

3. 給基本型別資料新增屬性,不報錯,但取值時是undefined

1 a = 3

2 a.prop = 4

3 alert(a + a.prop) //

?

變數a為數字3,給其新增prop屬性,值為4(奇怪吧在js中這是允許的,且不會有語法錯誤)。然後alert出a+a.prop的結果。結果是nan。a.prop為undefined,3+undefined為nan。

舉一反三,給字串新增屬性:

1 str = 'a'

2 str.prop = 'b'

3 alert(str + str.prop) //

?

結果呢?

4. 隱式的全域性變數

1

var a = 1

2function

func()

5func()

6alert(a)

7 alert(b) //

?

js中不用var宣告的變數預設是全域性變數,而這裡的連等使的情況更加隱蔽。這裡的b是全域性的,因此func外可以訪問。

5. 變數宣告早於**執行(scoping and hoisting)

1

var uname = 'jack'

2function

change()

7 change()

這裡容易犯迷糊的是第乙個alert,如果認為函式change外已經宣告賦值了,此時應該是jack,實際函式內又var了一次(雖然var在其後),預解析時仍然會將其置undefined。這也是為什麼書裡都建議變數宣告都放在**塊的最前面。

6. 函式宣告早於變數宣告

1

function

change()

6varfn7

}8 change()

change內先alert出fn,後函式宣告,再變數宣告。如果fn沒有函式宣告而僅是變數宣告,那麼結果與5一樣是undefined。但這裡卻是function。即同乙個作用域內,函式宣告放在**塊後面和前面都沒有關係,函式可以正常使用。而變數宣告則需先置前,先使用則是undefined。

JS筆試題中的型別轉換

分享一道筆試題 let x valueof console.log x 20 console.log x 30 複製 答案是false true 為什麼?讓我們回到紅寶書中,對於相等描述符是這樣表述的 是相等操作符,如果兩個運算元相等,則返回true,而不相等操作符由嘆號後更等於號 表示,如果兩個運...

(常筆試 面試題)const的用途有哪些?

0.const關鍵字概述 1 const是constant的簡寫,只要乙個變數前面用const來修飾,就意味著該變數裡的資料可以被訪問,不能被修改。也就是說const意味著 唯讀 readonly。不能說const修飾的都是常量。2 修飾規則 const離誰近,誰就不能被修改 3 本質 const在...

一道錯過的很基礎的筆試題

目前只記得個大概了 乙個16位的作業系統 unsigned char a 4 3 a 當初自己寫的答案是3,但是真相卻不是這樣?第乙個自己考慮到了隱性強制型別轉換,第二個計算機是通過補碼的形式來表示資料的,不過當時還是算錯了!原碼就是二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘...