好程式設計師Java教程分享JavaScript常見面試題五
好程式設計師Java 教程分享 JavaScript 常見面試題五
1 、以下程式碼行將輸出什麼到控制檯 ?
console.log("0||1="+(0||1));console.log("1||2="+(1||2));console.log("0&&1="+(0&&1));console.log("1&&2="+(1&&2));
並解釋。
該程式碼將輸出:
0||1=11||2=10&&1=01&&2=2
在JavaScript 中, || 和 && 都是邏輯運算子,用於在從左至右計算時,返回第一個可完全確定的“邏輯值”。
或(||) 運算子。在形如 X||Y 的表示式中,首先計算 X 並將其解釋執行為一個布林值。如果這個布林值 true ,那麼返回 true(1) ,不再計算 Y ,因為“或”的條件已經滿足。如果這個布林值為 false ,那麼我們仍然不能知道 X||Y 是真是假,直到我們計算 Y ,並且也把它解釋執行為一個布林值。
因此,0||1 的計算結果為 true(1) ,同理計算 1||2 。
與(&&) 運算子。在形如 X&&Y 的表示式中,首先計算 X 並將其解釋執行為一個布林值。如果這個布林值為 false ,那麼返回 false(0) ,不再計算 Y ,因為“與”的條件已經失敗。如果這個布林值為 true ,但是,我們仍然不知道 X&&Y 是真是假,直到我們去計算 Y ,並且也把它解釋執行為一個布林值。
不過,關於&& 運算子有趣的地方在於,當一個表示式計算為“ true ”的時候,那麼就返回表示式本身。這很好,雖然它在邏輯表示式方面計算為“真”,但如果你希望的話也可用於返回該值。這就解釋了為什麼,有些令人奇怪的是, 1&&2 返回 2( 而不是你以為的可能返回 true 或 1) 。
2 、執行下面的程式碼時將輸出什麼 ? 請解釋。
console.log(false=='0')console.log(false==='0')
程式碼將輸出:
truefalse
在JavaScript 中,有兩種等式運算子。三個等於運算子 === 的作用類似傳統的等於運算子:如果兩側的表示式有著相同的型別和相同的值,那麼計算結果為 true 。而雙等於運算子,會只強制比較它們的值。因此,總體上而言,使用 === 而不是 == 的做法更好。 !==vs!= 亦是同理。
3 、以下程式碼將輸出什麼 ? 並解釋你的答案。
vara={},
b={key:'b'},c={key:'c'};
a=123;
a[c]=456;
console.log(a);
這段程式碼將輸出456( 而不是 123) 。
原因為:當設定物件屬性時,JavaScript 會暗中字串化引數值。在這種情況下,由於 b 和 c 都是物件,因此它們都將被轉換為 "[objectObject]" 。結果就是, a 和 a[c] 均相當於 a["[objectObject]"] ,並可以互換使用。因此,設定或引用 a[c] 和設定或引用 a 完全相同。
4 、以下程式碼行將輸出什麼到控制檯 ?
console.log((functionf(n){return((n>1)?n*f(n-1):n)})(10));
並解釋你的答案。
程式碼將輸出10! 的值 ( 即 10! 或 3628800) 。
原因是:
命名函式f() 遞迴地呼叫本身,當呼叫 f(1) 的時候,只簡單地返回 1 。下面就是它的呼叫過程:
f(1):returnsn,whichis1f(2):returns2*f(1),whichis2f(3):returns3*f(2),whichis6f(4):returns4*f(3),whichis24f(5):returns5*f(4),whichis120f(6):returns6*f(5),whichis720f(7):returns7*f(6),whichis5040f(8):returns8*f(7),whichis40320f(9):returns9*f(8),whichis362880f(10):returns10*f(9),whichis3628800
5 、請看下面的程式碼段。控制檯將輸出什麼,為什麼 ?
(function(x){return(function(y){console.log(x);
})(2)
})(1);
控制檯將輸出1 ,即使從來沒有在函式內部設定過 x 的值。原因是:
閉包是一個函式,連同在閉包建立的時候,其範圍內的所有變數或函式一起。在JavaScript 中,閉包是作為一個“內部函式”實施的:即,另一個函式主體內定義的函式。閉包的一個重要特徵是,內部函式仍然有權訪問外部函式的變數。
因此,在本例中,由於x 未在函式內部中定義,因此在外部函式範圍中搜尋定義的變數 x ,且被發現具有 1 的值。
6 、下面的程式碼將輸出什麼到控制檯,為什麼:
varhero={
_name:'JohnDoe',
getSecretIdentity:function(){returnthis._name;
}
};varstoleSecretIdentity=hero.getSecretIdentity;console.log(stoleSecretIdentity());console.log(hero.getSecretIdentity());
程式碼有什麼問題,以及應該如何修復。
程式碼將輸出:
undefinedJohnDoe
第一個console.log 之所以輸出 undefined ,是因為我們正在從 hero 物件提取方法,所以呼叫了全域性上下文中 ( 即視窗物件 ) 的 stoleSecretIdentity() ,而在此全域性上下文中, _name 屬性不存在。
其中一種修復stoleSecretIdentity() 函式的方法如下:
varstoleSecretIdentity=hero.getSecretIdentity.bind(hero);
7 、建立一個給定頁面上的一個 DOM 元素,就會去訪問元素本身及其所有子元素 ( 不只是它的直接子元素 ) 的函式。對於每個被訪問的元素,函式應該傳遞元素到提供的回撥函式。
此函式的引數為:
DOM 元素
回撥函式( 將 DOM 元素作為其引數 )
訪問樹(DOM) 的所有元素是經典的深度優先搜尋演算法應用。下面是一個示範的解決方案:
functionTraverse(p_element,p_callback){
p_callback(p_element);varlist=p_element.children;for(vari=0;i<list.length;i++){
Traverse(list,p_callback);//recursivecall
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2661749/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java教程分享JavaScript常見面試題一程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題三程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題二程式設計師JavaScript面試題
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師Java教程分享XML常見面試題程式設計師JavaXML面試題
- 好程式設計師Java教程分享Java面試常見技術難題程式設計師Java面試
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 好程式設計師Java教程分享Java多執行緒常見面試題程式設計師Java執行緒面試題
- 好程式設計師Python教程分享常見的Python面試題程式設計師Python面試題
- 好程式設計師Python教程分享Python常見面試問題程式設計師Python面試
- 好程式設計師web前端教程分享Jquery常見面試題程式設計師Web前端jQuery面試題
- 好程式設計師web前端分享常見面試題程式設計師Web前端面試題
- 好程式設計師web前端教程分享JavaScript面試題程式設計師Web前端JavaScript面試題
- 好程式設計師web前端教程分享HTML/CSS部分常見面試題程式設計師Web前端HTMLCSS面試題
- 好程式設計師Java學習路線分享Spring常見面試題程式設計師JavaSpring面試題
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- 好程式設計師web前端分享HTML5常見面試題集錦五程式設計師Web前端HTML面試題
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師分享Java常見面試題Tomcat最佳化經驗程式設計師Java面試題Tomcat
- 好程式設計師Java教程分享jsp相關面試題程式設計師JavaJS面試題
- 好程式設計師Java培訓分享Java多執行緒常見面試問題程式設計師Java執行緒面試
- Java程式設計師面試常見問題Java程式設計師面試
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- 好程式設計師web前端教程分享常見基礎面試題之效能最佳化程式設計師Web前端面試題
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題一程式設計師Linux面試
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題二程式設計師Linux面試
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題三程式設計師Linux面試
- 好程式設計師Java分享Javamain十個面試題程式設計師JavaAI面試題
- 好程式設計師Java教程分享面試中Spring的技術問題程式設計師Java面試Spring
- 好程式設計師web前端分享HTML5常見面試題集錦四程式設計師Web前端HTML面試題
- 好程式設計師web前端分享HTML5常見面試題集錦三程式設計師Web前端HTML面試題
- 好程式設計師web前端分享HTML5常見面試題集錦二程式設計師Web前端HTML面試題
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師分享JavaScript中8個常見的陷阱程式設計師JavaScript
- VUE的面試題分享-好程式設計師Vue面試題程式設計師
- 好程式設計師Java教程分享Java中經常出現的問題程式設計師Java
- 好程式設計師web前端教程分享Vue.js面試題程式設計師Web前端Vue.js面試題