導航:首頁 > 編程語言 > 珠峰js考試題

珠峰js考試題

發布時間:2023-10-18 00:00:25

1. js 燒腦面試題大賞

答案

2、1

解析

首先基本類型數據是按值傳遞的,所以執行b函數時,b的參數a接收的值為1,參數a相當於函數內部的變數,當本作用域有和上層作用域同名的變數時,無法訪問到上層變數,所以函數內無論怎麼修改a,都不影響上層,所以函數內部列印的a是2,外面列印的仍是1。

答案

報錯

解析

給函數多個參數設置默認值實際上跟按順序定義變數一樣,所以會存在暫時性死區的問題,即前面定義的變數不能引用後面還未定義的變數,而後面的可以訪問前面的。

答案

10、20

解析

答案

undefined、{n: 2}

解析

恕筆者不才,這道題筆者做一次錯一次。

反正按照網上大部分的解釋是因為.運算符優先順序最高,所以會先執行a.x,此時a、b共同指向的{n: 1}變成了{n: 1, x: undefined},然後按照連等操作從右到左執行代碼,a = {n: 2},顯然,a現在指向了一個新對象,然後a.x = a,因為a.x最開始就執行過了,所以這里其實等價於:({n: 1, x: undefined}).x = b.x = a = {n: 2}。

答案

[]

解析

這題比較簡單,arr[10]=10,那麼索引3到9位置上都是undefined,arr[3]等列印出來也確實是undefined,但是,這里其實涉及到ECMAScript版本不同對應方法行為不同的問題,ES6之前的遍歷方法都會跳過數組未賦值過的位置,也就是空位,但是ES6新增的for of方法就不會跳過。

答案

Goodbye Jack

解析

答案

NaN、13、NaN、1、1[object Object]、1、[object Object]

解析

這道題考察的顯然是+號的行為:

1.如果有一個操作數是字元串,那麼把另一個操作數轉成字元串執行連接

2.如果有一個操作數是對象,那麼調用對象的valueOf方法轉成原始值,如果沒有該方法或調用後仍是非原始值,則調用toString方法

3.其他情況下,兩個操作數都會被轉成數字執行加法操作

答案

456

解析

對象有兩種方法設置和引用屬性,obj.name和obj['name'],方括弧里可以字元串、數字和變數設置是表達式等,但是最終計算出來得是一個字元串,對於上面的b和c,它們兩個都是對象,所以會調用toString()方法轉成字元串,對象轉成字元串和數組不一樣,和內容無關,結果都是[object Obejct],所以a[b]=a[c]=a['[object Object]']。

答案

25、20、20、25

解析

這道題考察的是this指向問題:

1.逗號操作符會返回表達式中的最後一個值,這里為inner.func對應的函數,注意是函數本身,然後執行該函數,該函數並不是通過對象的方法調用,而是在全局環境下調用,所以this指向window,列印出來的當然是window下的out

2.這個顯然是以對象的方法調用,那麼this指向該對象

3.加了個括弧,看起來有點迷惑人,但實際上(inner.func)和inner.func是完全相等的,所以還是作為對象的方法調用

4.賦值表達式和逗號表達式相似,都是返回的值本身,所以也相對於在全局環境下調用函數

答案

1、2、3

解析

這題考察的是變數解構賦值的問題,數組解構賦值是按位置對應的,而對象只要變數與屬性同名,順序隨意。

答案

[4, 5, 3]

解析

是不是從來沒有用assign方法合並過數組?assign方法可以用於處理數組,不過會把數組視為對象,比如這里會把目標數組視為是屬性為0、1、2的對象,所以源數組的0、1屬性的值覆蓋了目標對象的值。

答案

4

解析

這題考查的是自增運算符的前綴版和後綴版,以及switch的語法,後綴版的自增運算符會在語句被求值後才發生,所以x會仍以1的值去匹配case分支,那麼顯然匹配到為1的分支,此時,x++生效,x變成2,再執行++x,變成3,因為沒有break語句,所以會進入當前case後面的分支,所以再次++x,最終變成4。

答案

true、true

解析

2.typeof對函數使用返回'function',class只是es6新增的語法糖,本質上還是函數,所以兩者相等

答案

true、false

解析

1.沒啥好說的,typeof對數字類型返回'number'。

2.這題考查的是運算符優先順序的問題,邏輯非!的優先順序比全等===高,所以先執行!!typeof count,結果為true,然後執行true === 'number',結果當然為false,可以點擊這里查看優先順序列表: 點我 [1]

答案

2、2

解析

答案

1

解析

這道題考察的是作用域的問題,作用域其實就是一套變數的查找規則,每個函數在執行時都會創建一個執行上下文,其中會關聯一個變數對象,也就是它的作用域,上面保存著該函數能訪問的所有變數,另外上下文中的代碼在執行時還會創建一個作用域鏈,如果某個標識符在當前作用域中沒有找到,會沿著外層作用域繼續查找,直到最頂端的全局作用域,因為js是詞法作用域,在寫代碼階段就作用域就已經確定了,換句話說,是在函數定義的時候確定的,而不是執行的時候,所以a函數是在全局作用域中定義的,雖然在b函數內調用,但是它只能訪問到全局的作用域而不能訪問到b函數的作用域。

答案

undefined

解析

這道題考察的是this的指向問題,箭頭函數執行的時候上下文是不會綁定this的,所以它裡面的this取決於外層的this,這里函數執行的時候外層是全局作用域,所以this指向window,window對象下沒有name屬性,所以是undefined。

答案

{a: {b: 1}}

解析

這道題很簡單,因為assign方法執行的是淺拷貝,所以源對象的a屬性會直接覆蓋目標對象的a屬性。

答案

undefined、1、2

解析

答案

undefined

解析

答案

列印出arr數組本身

解析

函數作為某個對象的方法調用,this指向該對象,數組顯然也是對象,只不過我們都習慣了對象引用屬性的方法:obj.fn,但是實際上obj['fn']引用也是可以的。

答案

1、b函數本身、b函數本身

解析

2.和第一題類似,只是b沒有賦值操作,那麼執行到這兩行相當於都沒有操作,b當然是函數。

答案

2、4、1、1、2、3、3

解析

1.執行Foo函數的靜態方法,列印出2。

2.執行getName,當前getName是列印出4的那個函數。

3.執行Foo函數,修改了全局變數getName,賦值成了列印1的函數,然後返回this,因為是在全局環境下執行,所以this指向window,因為getName已經被修改了,所以列印出1。

4.因為getName沒有被重新賦值,所以再執行仍然列印出1。

5.new操作符是用來調用函數的,所以new Foo.getName()相當於new (Foo.getName)(),所以new的是Foo的靜態方法getName,列印出2。

6.因為點運算符(.)的優先順序和new是一樣高的,所以從左往右執行,相當於(new Foo()).getName(),對Foo使用new調用會返回一個新創建的對象,然後執行該對象的getName方法,該對象本身並沒有該方法,所以會從Foo的原型對象上查找,找到了,所以列印出3。

7.和上題一樣,點運算符(.)的優先順序和new一樣高,另外new是用來調用函數的,所以new new Foo().getName()相當於new ((new Foo()).getName)(),括弧裡面的就是上一題,所以最後找到的是Foo原型上的方法,無論是直接調用,還是通過new調用,都會執行該方法,所以列印出3。

答案

it's Matthew, from England

it's Bob, from England

解析

Object.create方法會創建一個對象,並且將該對象的__proto__屬性指向傳入的對象,所以p1和p2兩個對象的原型對象指向了同一個對象,接著給p1添加了一個name屬性,然後調用了p1的setCountry方法,p1本身是沒有這個方法的,所以會沿著原型鏈進行查找,在它的原型上,也就是person對象上找到了這個方法,執行這個方法會給address對象的country屬性設置傳入的值,p1本身也是沒有address屬性的,但是和name屬性不一樣,address屬性在原型對象上找到了,並且因為是個引用值,所以會成功修改它的country屬性,接著對p2的操作也是一樣,然後因為原型中存在引用值會在所有實例中共享,所以p1和p2它們引用的address也是同一個對象,一個實例修改了,會反映到所有實例上,所以p2的修改會覆蓋p1的修改,最終country的值為England。

答案

2、3、5、4、1

解析

這道題顯然考察的是事件循環的知識點。

js是一門單線程的語言,但是為了執行一些非同步任務時不阻塞代碼,以及避免等待期間的資源浪費,js存在事件循環的機制,單線程指的是執行js的線程,稱作主線程,其他還有一些比如網路請求的線程、定時器的線程,主線程在運行時會產生執行棧,棧中的代碼如果調用了非同步api的話則會把事件添加到事件隊列里,只要該非同步任務有了結果便會把對應的回調放到【任務隊列】里,當執行棧中的代碼執行完畢後會去讀取任務隊列里的任務,放到主線程執行,當執行棧空了又會去檢查,如此往復,也就是所謂的事件循環。

非同步任務又分為【宏任務】(比如setTimeout、setInterval)和【微任務】(比如promise),它們分別會進入不同的隊列,執行棧為空完後會優先檢查微任務隊列,如果有微任務的話會一次性執行完所有的微任務,然後去宏任務隊列里檢查,如果有則取出一個任務到主線程執行,執行完後又會去檢查微任務隊列,如此循環。

回到這題,首先整體代碼作為一個宏任務開始執行,遇到setTimeout,相應回調會進入宏任務隊列,然後是promise,promise的回調是同步代碼,所以會列印出2,for循環結束後調用了resolve,所以then的回調會被放入微任務隊列,然後列印出3,最後列印出5,到這里當前的執行棧就空了,那麼先檢查微任務隊列,發現有一個任務,那麼取出來放到主線程執行,列印出4,最後檢查宏任務隊列,把定時器的回調放入主線程執行,列印出1。

答案

1、7、6、8、2、4、9、11、3、10、5、12

2. js基礎面試題131-160道題目

131.用原生 javaScript 的實現過什麼功能嗎?

參考答案:輪播圖、手風琴、放大鏡、3D動畫效果等,切記,所答的一定要知道實現原理!,不知道還不如不說!

參與互動


132.javascript 代碼中的"use strict"; 是什麼意思 ? 使用它區別是什麼?

參考答案:意思是使用嚴格模式,使用嚴格模式,一些不規范的語法將不再支持

參與互動


133.簡述創建函數的幾種方式

參考答案:

參與互動


134.window.location.search() 返回的是什麼?

參考答案:查詢(參數)部分。除了給動態語言賦值以外,我們同樣可以給靜態頁面, 並使用 javascript 來獲得相信應的參數值 返回值:?ver=1.0&id=timlq 也就是問號後面的!

參與互動


135.window.location.hash 返回的是什麼?

參考答案:錨點 , 返回值:#love ;

參與互動


136.window.location.reload() 作用?

參考答案:刷新當前頁面

參與互動


137.為什麼不能定義 1px 左右的 p 容器?

參考答案: IE6 下這個問題是因為默認的行高造成的,解決的方法也有很多,例如: overflow:hidden | zoom:0.08 | line-height:1px

參與互動


138.BOM 對象有哪些,列舉 window 對象?

參考答案:

參與互動


139.簡述 readonly 與 disabled 的區別

參考答案:

參與互動


140.為什麼擴展 javascript 內置對象不是好的做法?

參考答案:

參與互動


141.什麼是三元表達式?「三元」表示什麼意思?

參考答案:三元如名字表示的三元運算符需要三個操作數。

語法是 條件 ? 結果1 : 結果2; .這里你把條件寫在問號(?)的前面後面跟著用冒號(:)分隔的結果1和結果2。滿足條件時結果1否則結果2。

參與互動


142.我們給一個 dom 同時綁定兩個點擊事件,一個用捕獲,一個用冒泡,你來說下會執行幾次事件,然後會先執行冒泡還是捕獲

參考答案:所有事件的順序是:其他元素捕獲階段事件 -> 本元素代碼順序事件 -> 其他元素冒泡階段事件 。

參考

參與互動


144.簡述一下 Handlebars 的基本用法?

參考答案:沒有用過的話說出它是干什麼的即可

參與互動


143.簡述一下 Handlerbars 的對模板的基本處理流程, 如何編譯的?如何緩存的?

參考答案:

參與互動


145.前端 templating(Mustache, underscore, handlebars)是幹嘛的, 怎麼用?

參考答案:

參與互動


146.知道什麼是 webkit 么? 知道怎麼用瀏覽器的各種工具來調試和 debug 代碼么?

參考答案:Webkit 是瀏覽器引擎,包括 html 渲染和 js 解析功能,手機瀏覽器的主流內核,與之相對應的引擎有 Gecko(Mozilla Firefox 等使用)和 Trident(也稱 MSHTML,IE 使用)。 對於瀏覽器的調試工具要熟練使用,主要是頁面結構分析,後台請求信息查看,js 調試工具使用,熟練使用這些工具可以快速提高解決問題的效率

參與互動


147.如何測試前端代碼? 知道 BDD, TDD, Unit Test 么? 知道怎麼測試你的前端工程么(mocha, sinon, jasmin, qUnit..)?

參考答案:了解 BDD 行為驅動開發與 TDD 測試驅動開發已經單元測試相關概念

參與互動


148.JavaScript 的循環語句有哪些?

參考答案:while for do while forEach

參與互動


149.作用域-編譯期執行期以及全局局部作用域問題

參考答案:js 執行主要的兩個階段:預解析和執行期

參與互動


150.如何添加 html 元素的事件,有幾種方法?請列舉

參考答案:直接在標簽里添加;在元素上添加、使用事件注冊函數添加

參與互動


151.列舉瀏覽器對象模型 BOM 里常用的至少 4 個對象,並列舉 window 對象的常用方法至少 5 個

參考答案:

對象:Window document location screen history navigator

方法:Alert() confirm() prompt() open() close()

參與互動


152.事件綁定的方式

參考答案:

參與互動


153.事件循環

參考答案:事件循環是一個單線程循環,用於監視調用堆棧並檢查是否有工作即將在任務隊列中完成。如果調用堆棧為空並且任務隊列中有回調函數,則將回調函數出隊並推送到調用堆棧中執行。

參與互動


154.事件模型

參考答案:

解析:參考

參與互動


155.如何自定義事件

參考答案:

1.原生提供了 3 個方法實現自定義事件 2.createEvent,設置事件類型,是 html 事件還是 滑鼠事件 3.initEvent 初始化事件,事件名稱,是否允許冒泡,是否阻止自定義事件 4.dispatchEvent 觸發事件

MDN

參與互動


156.target 和 currentTarget 區別

參考答案:

參與互動


157.prototype 和__proto__的關系是什麼

參考答案:

所有的對象都擁有__proto__屬性,它指向對象構造函數的 prototype 屬性

所有的函數都同時擁有__proto__和 protytpe 屬性 函數的__proto__指向自己的函數實現 函數的 protytpe 是一個對象 所以函數的 prototype 也有__proto__屬性 指向 Object.prototype

Object.prototype.__proto__指向 null

參與互動


158.什麼是原型屬性?

參考答案:從構造函數的prototype屬性出發找到原型,這時候就把原型稱之為構造函數的原型屬性

參與互動


159.什麼是原型對象?

參考答案:從實例的__proto__出發,找到原型,這時候就把原型稱之為實例的原型對象。

參與互動


160.使用 let、var 和 const 創建變數有什麼區別

參考答案:

let 和 const 的區別在於:let 允許多次賦值,而 const 只允許一次。

閱讀全文

與珠峰js考試題相關的資料

熱點內容
java將數字轉換成字母 瀏覽:854
c盤中的哪些是系統文件夾 瀏覽:668
分布式服務如何跨庫統計數據 瀏覽:829
力控轉發數據客戶端模式如何建立 瀏覽:200
怎麼樣讓自己的網站不被別人看到 瀏覽:711
編程擴展效果如何 瀏覽:335
榮耀暢玩手環同步qq 瀏覽:475
怎麼向sql中添加資料庫 瀏覽:596
錄歌失敗重啟app什麼意思 瀏覽:522
壓縮文件包怎麼在微信發送 瀏覽:432
mysql資料庫怎麼插入時間值 瀏覽:191
微信視頻不能轉發朋友圈 瀏覽:596
影視後期的app有哪些 瀏覽:956
電子保單數據出錯什麼意思 瀏覽:368
如何以文件下載音樂 瀏覽:438
計算機網路章節練習 瀏覽:999
單片機的外部中斷程序 瀏覽:48
表格批量更名找不到指定文件 瀏覽:869
js的elseif 瀏覽:584
3dmaxvray視頻教程 瀏覽:905

友情鏈接