10道javascript筆試題

一、考察this

輸出:10 2javascript

第一次輸出10應該沒有問題。咱們知道取對象屬於除了點操做符還能夠用中括號,因此第二次執行時至關於arguments調用方法,this指向arguments,而這裏傳了兩個參數,故輸出arguments長度爲2。php

二、var和函數的提早聲明

輸出:function  a() {} 2html

咱們知道var和function是會提早聲明的,並且function是優先於var聲明的(若是同時存在的話),因此提早聲明後輸出的a是個function,而後代碼往下執行a進行從新賦值了,故第二次輸出是2。java

三、局部變量和全局變量

輸出:10 報錯 30git

這是個我犯了好久的錯誤,很長一段時間我都覺得{…}內的新聲明的變量是局部變量,後來我才發現function內的新聲明的變量纔是局部變量,而 沒有用var聲明的變量在哪裏都是全局變量。再次提醒切記只有function(){}內新聲明的才能是局部變量,while{…}、if{…}、 for(..) 以內的都是全局變量(除非自己包含在function內)。github

四、變量隱式聲明

答案:10web

前面我說過function和var會提早聲明,而其實{…}內的變量也會提早聲明。因而代碼還沒執行前,a變量已經被聲明,因而 ‘a’ in window 返回true,a被賦值。閉包

五、給基本類型數據添加屬性,不報錯,但取值時是undefined

答案:NaN undefinedhelloapp

給基本類型數據加屬性不報錯,可是引用的話返回undefined,10+undefined返回NaN,而undefined和string相加時轉變成了字符串。dom

六、函數聲明優於變量聲明

答案:function

由於函數聲明優於變量聲明。咱們知道在代碼逐行執行前,函數聲明和變量聲明會提早進行,而函數聲明又會優於變量聲明,這裏的優於能夠理解爲晚於變量聲明後,若是函數名和變量名相同,函數聲明就能覆蓋變量聲明。因此以上代碼將函數聲明和變量聲明調換順序仍是同樣結果。

七、判斷一個字符串中出現次數最多的字符,並統計次數

  • hash table方式:
  • 正則方式:

八、經典閉包

  • dom污染法:
  • 閉包:

九、this

答案:division element undefined

第一次輸出很好理解,第二次的話仔細看,this其實已經指向了this.m_Element,由於是this.m_Element調用的 addEventListener函數,因此內部的this全指向它了。能夠試着加上一行代碼this.m_Element.m_Text = ‘hello world’,就會alert出hello world了。

十、split

請編寫一個JavaScript函數 parseQueryString,它的用途是把URL參數解析爲一個對象,如: var url = 「http://witmax.cn/index.php?key0=0&key1=1&key2=2″

 

若有意見建議歡迎交流斧正~

相關文章
相關標籤/搜索