【錯題記錄】JavaScript專項練習(篇五)
1.以下程式執行後返回的結果是
var p1 = {
name:'小明',
age:'12',
action:function(where,doing){
console.log(this.age + '歲的'+this.name + '在' + where + doing);
}
}
var p2 = {
name:'小紅',
age:'15'
}
console.log(p1.action.call(p2,'操場上','運動'))
解析:答案 15歲的小紅在操場上運動
call 、bind 、 apply 這三個函式的第一個引數都是 this 的指向物件,第二個引數差別就來了:
call的引數是直接放進去的,第二第三第n個引數全都用逗號分隔,直接放到後面 obj.myFun.call(db,‘廣州’, …
,‘string’ ); apply的所有引數都必須放在一個陣列裡面傳進去 obj.myFun.apply(db,[‘廣州’, …,
‘string’ ]); bind除了返回是函式以外,它 的引數和call 一樣。
當然,三者的引數不限定是string型別,允許是各種型別,包括函式 、 object 等
可以觀看此連結:尚矽谷_call和apply
2. a 的結果是什麼
if(! "a" in window){
var a = 1;
}
alert(a);
解析:答案:undefined
if(! “a” in window) 這句話程式碼的意思是:判斷全域性物件window中是否有變數a,如果沒有變數a,就進入判斷將a賦值為1,但由於變數的提升,上面程式碼等價於:
var a;
if (! "a" in window) {
a = 1;
}
alert(a);
由於變數的提升,在執行這段程式碼之後,全域性物件window中就已經存在a這個變數了,所以不能進入判斷,對a進行賦值,所以a的值為undefined
3. JavaScript實現繼承的方式,不正確的是
a. 原型鏈繼承
b. 建構函式繼承
c. 組合繼承
d. 關聯繼承
解析:答案:d
原型鏈繼承、借用建構函式繼承、組合繼承、原型式繼承、寄生式繼承、寄生組合式繼承
4.以下程式碼執行後,a.x 和 b.x 的結果分別是
function A(x){
this.x = x;
}
A.prototype.x = 1;
function B(x){
this.x = x;
}
B.prototype = new A();
var a = new A(2), b = new B(3);
delete b.x;
解析:答案 2, undefined
B的prototype=new A(),想錯的可能認為建構函式的x沒有賦值就自動去原型找,錯了,如果建構函式沒有x才會去原型找,如果有x但是沒有賦值,則是undefined
,相當於x=undefined.就不會進入原型鏈
了
5.
NOSCRIPT標籤用來定義在指令碼未被執行時的替代內容
6. 下列哪些事件不支援冒泡
a. resize
b. click
c. blur
d. mouseleave
解析:答案 a c d
冒泡事件很多,不支援冒泡事件如下:
1.focus
2.blur
3.mouseenter
4.mouseleave
5.load
6.unload
7.resize
7. 下面有關瀏覽器中使用js跨域獲取資料的描述,說法錯誤的是
a. 域名、埠相同,協議不同,屬於相同的域
b. js可以使用jsonp進行跨域
c. 通過修改document.domain來跨子域
d. 使用window.name來進行跨域
解析:答案 a
只要 協議 、 域名 、 埠
有任何一個 不同
, 都被當作是 不同 的域
8. 以下程式碼執行後,控制檯的輸出是
var a = 10;
function a() {}
console.log(typeof a)
解析:答案 "number"
函式提升大於變數提升,變數提升會提升到除函式宣告的後面;變數提升,但是賦值不提升,程式碼等價於
function a() {}
var a;
a = 10;
console.log(typeof a)
9. 在瀏覽器控制檯執行以下程式碼,結果是(後續理解…)
解析:答案 4400 4401 4399 4400
10. 下面哪個不是RegExp物件的方法
a. test
b. match
c. exec
d. compile
解析:答案 match
11.如果需要匹配包含文字的元素,用下面哪種方法來實現
a. text()
b. contains()
c. input()
d. attr(name)
解析:答案 b
四個方法都是jq中的方法,注意題幹說的是匹配包含文字的元素
text()是設定或獲取元素文字內容
contains()是檢測元素是否含有相應的文字
input()選擇器,選取表單元素
attr(name,value)屬性操作,設定或返回被選元素的屬性和屬性值
12. document.getElementById(“info”).innerHTML 的值是
<div id=”info” style=”display:block”><p> 請填寫 </p></div>
解析:答案 <p>請填寫</p>
13. 如果不給cookie設定過期時間會怎麼樣
解析:答案 在瀏覽器會話結束時過期
cookie的有效時間預設為-1,如果不進行設定的話,就會預設在瀏覽器會話關閉時結束。
可以通過setMaxAge()方法設定cookie的生命期,當setMaxAge(0)表示立刻刪除該瀏覽器上指定的cookie
14. 以下選項描述錯誤的是
a. 在原型上擴充套件的可列舉方法,會被for in迴圈出來
b. 使用object.defineProperty可向物件新增或者修改屬性
c. 每個物件都有prototype屬性,返回物件型別原型的引用
d. 通過hasOwnProperty可判斷一個物件以及其原型鏈上是否具有指定名稱的屬性
e. 原型鏈是JS實現繼承的一種模型
f. for迴圈是按順序的,for in 迴圈是不一定按順序的
解析:答案 d
《你不知道的JS》(上)119頁:
15. 下面哪些方法可以用作javascript非同步模式的程式設計
a. 回撥函式 (非同步程式設計最基本的方法)
b. 事件監聽
c. 釋出/訂閱
d. Promises物件
解析:答案 a b c d
先解釋一下“同步模式”和“非同步模式”:
(1)同步模式:就是後一個任務等待前一個任務結束,然後再執行,程式的執行順序與任務的排列順序是一致的、同步的
(2)非同步模式:完全不同,每一個任務有一個或多個回撥函式(callback),前一個任務結束後,不是執行後一個任務,而是執行回撥函式,後一個任務則是不等前一個任務結束就執行,所以程式的執行順序與任務的排列順序是不一致的、非同步的
JavaScript中實現非同步程式設計模式的4種方法,回撥函式、事件監聽、釋出/訂閱、Promises物件:
(1)回撥函式:這是非同步程式設計最基本的方法,優點是簡單、容易理解和部署,缺點是不利於程式碼的閱讀和維護,各個部分之間高度耦合(Coupling),流程會很混亂,而且每個任務只能指定一個回撥函式。 例:假定有兩個函式f1和f2,後者等待前者的執行結果,如果f1是一個很耗時的任務,可以考慮改寫f1,把f2寫成f1的回撥函式
(2)事件監聽:任務的執行不取決於程式碼的順序,而取決於某個事件是否發生。優點是比較容易理解,可以繫結多個事件,每個事件可以指定多個回撥函式,而且可以”去耦合”(Decoupling),有利於實現模組化。缺點是整個程式都要變成事件驅動型,執行流程會變得很不清晰。例:為f1繫結一個事件,當f1發生done事件,就執行f2
(3)釋出/訂閱:我們假定,存在一個”訊號中心”,某個任務執行完成,就向訊號中心”釋出”(publish)一個訊號,其他任務可以向訊號中心”訂閱”(subscribe)這個訊號,從而知道什麼時候自己可以開始執行。這就叫做”釋出/訂閱模式”(publish-subscribe pattern),又稱”觀察者模式”(observer pattern)。這種方法的性質與”事件監聽”類似,但是明顯優於後者。因為我們可以通過檢視”訊息中心”,瞭解存在多少訊號、每個訊號有多少訂閱者,從而監控程式的執行
(4)Promises物件:是CommonJS工作組提出的一種規範,目的是為非同步程式設計提供統一介面。簡單說,它的思想是,每一個非同步任務返回一個Promise物件,該物件有一個then方法,允許指定回撥函式。回撥函式變成了鏈式寫法,程式的流程可以看得很清楚,而且有一整套的配套方法,可以實現許多強大的功能。例:f1的回撥函式f2,f1().then(f2)
相關文章
- 【錯題記錄】JavaScript專項練習(篇六)JavaScript
- vsc練習問題記錄
- Bug除錯專項訓練四筆記除錯筆記
- Bug除錯專項訓練三筆記除錯筆記
- python 100題練習記錄(三)Python
- 五、python的練習題Python
- 數理統計筆記[牛客專項練習]筆記
- 思維題專項訓練
- 動態規劃專項訓練記錄 2024.3動態規劃
- javascript 學習記錄 -- 程式設計題集合JavaScript程式設計
- Javascript 學習 筆記五JavaScript筆記
- 生物套卷練習記錄
- SQL專項複習(視窗函式)——習題篇01SQL函式
- web前端 javascript 練習題一Web前端JavaScript
- [雜項] 刷題記錄
- JavaScript回顧學習:目錄篇JavaScript
- 語文套卷練習記錄
- stm32學習之除錯篇踩坑記錄除錯
- javascript學習筆記--元字元使用練習JavaScript筆記字元
- 學習 第3章:專項練習之一
- JavaScript Promise 學習記錄(一)JavaScriptPromise
- 前端學習記錄(CSS篇)前端CSS
- 演算法練習記錄(24.10.5)演算法
- Scala學習(五)練習
- Python練習題篇(列表、字典、元祖)Python
- GitHub學習除錯記錄Github除錯
- 資料結構專題練習資料結構
- postgresal使用錯誤解決 (記錄篇)
- Javascript 學習筆記--語法篇JavaScript筆記
- 14.第五章模態命題練習題
- 2024 Noip 做題記錄(五)
- CF專項訓練
- 專項訓練們
- ISCC 2024 練武題 misc趣題記錄
- ctfshow刷題記錄-社工篇-1
- Caffe學習記錄:Cifar-10 自定義網路訓練記錄
- JavaScript專項演算法題(6):PromisesJavaScript演算法Promise
- Python 學習除錯記錄Python除錯