日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java教程分享JavaScript常見(jiàn)面試題五

 好程序員IT 2019-10-28

Java教程分享JavaScript常見(jiàn)面試題五

1、以下代碼行將輸出什么到控制臺(tái)?

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中, || &&都是邏輯運(yùn)算符,用于在從左至右計(jì)算時(shí),返回第一個(gè)可完全確定的“邏輯值”。

( || )運(yùn)算符。在形如 X||Y的表達(dá)式中,首先計(jì)算X 并將其解釋執(zhí)行為一個(gè)布爾值。如果這個(gè)布爾值true,那么返回true(1),不再計(jì)算 Y,因?yàn)椤盎颉钡臈l件已經(jīng)滿足。如果這個(gè)布爾值為false,那么我們?nèi)匀徊荒苤?X||Y是真是假,直到我們計(jì)算 Y,并且也把它解釋執(zhí)行為一個(gè)布爾值。

因此, 0 || 1 的計(jì)算結(jié)果為true(1),同理計(jì)算1 || 2。

( &&)運(yùn)算符。在形如 X&&Y的表達(dá)式中,首先計(jì)算 X并將其解釋執(zhí)行為一個(gè)布爾值。如果這個(gè)布爾值為 false,那么返回 false(0),不再計(jì)算 Y,因?yàn)椤芭c”的條件已經(jīng)失敗。如果這個(gè)布爾值為true,但是,我們?nèi)匀徊恢?X&&Y 是真是假,直到我們?nèi)ビ?jì)算 Y,并且也把它解釋執(zhí)行為一個(gè)布爾值。

不過(guò),關(guān)于 &&運(yùn)算符有趣的地方在于,當(dāng)一個(gè)表達(dá)式計(jì)算為“true”的時(shí)候,那么就返回表達(dá)式本身。這很好,雖然它在邏輯表達(dá)式方面計(jì)算為“真”,但如果你希望的話也可用于返回該值。這就解釋了為什么,有些令人奇怪的是, 1 && 2返回 2(而不是你以為的可能返回 true 1)。

2、執(zhí)行下面的代碼時(shí)將輸出什么?請(qǐng)解釋。

console.log(false == '0')console.log(false === '0')

代碼將輸出:

truefalse

JavaScript中,有兩種等式運(yùn)算符。三個(gè)等于運(yùn)算符 === 的作用類(lèi)似傳統(tǒng)的等于運(yùn)算符:如果兩側(cè)的表達(dá)式有著相同的類(lèi)型和相同的值,那么計(jì)算結(jié)果為true。而雙等于運(yùn)算符,會(huì)只強(qiáng)制比較它們的值。因此,總體上而言,使用 ===而不是 ==的做法更好。 !==vs !=亦是同理。

3以下代碼將輸出什么?并解釋你的答案。

var a={},

b={key:'b'}, c={key:'c'};

a[b]=123;

a[c]=456;

console.log(a[b]);

這段代碼將輸出 456(而不是 123)。

原因?yàn)椋寒?dāng)設(shè)置對(duì)象屬性時(shí),JavaScript會(huì)暗中字符串化參數(shù)值。在這種情況下,由于 b c都是對(duì)象,因此它們都將被轉(zhuǎn)換為"[object Object]"。結(jié)果就是, a[b]a[c]均相當(dāng)于a["[object Object]"] ,并可以互換使用。因此,設(shè)置或引用 a[c]和設(shè)置或引用 a[b]完全相同。

4、以下代碼行將輸出什么到控制臺(tái)?

console.log((function f(n){return ((n > 1) ? n * f(n-1) : n)})(10));

并解釋你的答案。

代碼將輸出10!的值(10!3628800)

原因是:

命名函數(shù) f()遞歸地調(diào)用本身,當(dāng)調(diào)用 f(1)的時(shí)候,只簡(jiǎn)單地返回1。下面就是它的調(diào)用過(guò)程:

f(1): returns n, which is 1f(2): returns 2 * f(1), which is 2f(3): returns 3 * f(2), which is 6f(4): returns 4 * f(3), which is 24f(5): returns 5 * f(4), which is 120f(6): returns 6 * f(5), which is 720f(7): returns 7 * f(6), which is 5040f(8): returns 8 * f(7), which is 40320f(9): returns 9 * f(8), which is 362880f(10): returns 10 * f(9), which is 3628800

5、請(qǐng)看下面的代碼段??刂婆_(tái)將輸出什么,為什么?

(function(x) { return (function(y) { console.log(x);

})(2)

})(1);

控制臺(tái)將輸出 1,即使從來(lái)沒(méi)有在函數(shù)內(nèi)部設(shè)置過(guò)x的值。原因是:

閉包是一個(gè)函數(shù),連同在閉包創(chuàng)建的時(shí)候,其范圍內(nèi)的所有變量或函數(shù)一起。在JavaScript中,閉包是作為一個(gè)“內(nèi)部函數(shù)”實(shí)施的:即,另一個(gè)函數(shù)主體內(nèi)定義的函數(shù)。閉包的一個(gè)重要特征是,內(nèi)部函數(shù)仍然有權(quán)訪問(wèn)外部函數(shù)的變量。

因此,在本例中,由于 x未在函數(shù)內(nèi)部中定義,因此在外部函數(shù)范圍中搜索定義的變量 x,且被發(fā)現(xiàn)具有1的值。

6、下面的代碼將輸出什么到控制臺(tái),為什么:

var hero = {

_name: 'John Doe',

getSecretIdentity: function (){ return this._name;

}

}; var stoleSecretIdentity = hero.getSecretIdentity;console.log(stoleSecretIdentity());console.log(hero.getSecretIdentity());

代碼有什么問(wèn)題,以及應(yīng)該如何修復(fù)。

代碼將輸出:

undefinedJohn Doe

第一個(gè) console.log之所以輸出 undefined,是因?yàn)槲覀冋趶?hero對(duì)象提取方法,所以調(diào)用了全局上下文中(即窗口對(duì)象)stoleSecretIdentity(),而在此全局上下文中, _name屬性不存在。

其中一種修復(fù)stoleSecretIdentity() 函數(shù)的方法如下:

var stoleSecretIdentity = hero.getSecretIdentity.bind(hero);

7、創(chuàng)建一個(gè)給定頁(yè)面上的一個(gè)DOM元素,就會(huì)去訪問(wèn)元素本身及其所有子元素(不只是它的直接子元素)的函數(shù)。對(duì)于每個(gè)被訪問(wèn)的元素,函數(shù)應(yīng)該傳遞元素到提供的回調(diào)函數(shù)。

此函數(shù)的參數(shù)為:

DOM元素

回調(diào)函數(shù)(DOM元素作為其參數(shù))

訪問(wèn)樹(shù)(DOM)的所有元素是經(jīng)典的深度優(yōu)先搜索算法應(yīng)用。下面是一個(gè)示范的解決方案:

function Traverse(p_element,p_callback) {

p_callback(p_element); var list = p_element.children; for (var i = 0; i < list.length; i++) {

Traverse(list[i],p_callback); // recursive call

}

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多