摘要:變量提升表示的是變量的聲明會(huì)被提前到函數(shù)頂部的地方,而賦值語(yǔ)句不會(huì)提升。需要記住一點(diǎn)就是,在中,函數(shù)聲明的優(yōu)先級(jí)高于變量聲明的優(yōu)先級(jí)。因?yàn)橘x值語(yǔ)句不會(huì)被覆蓋,所以會(huì)是一個(gè)數(shù)字,而不是函數(shù),最終返回。
---- 有人會(huì)說(shuō)js很簡(jiǎn)單,很容易學(xué),但是要想把這門語(yǔ)言用活,用精通還是需要下很大的功夫的。那么我們就來(lái)看看接下來(lái)這幾道js面試題吧。
題1
if(!(a in window)){ var a = 1; } console.log(a);
在控制臺(tái)輸出的結(jié)果是 undefined,其實(shí)就是考察js中變量提升的知識(shí)點(diǎn)。
變量提升表示的是變量的聲明會(huì)被提前到函數(shù)頂部的地方,而賦值語(yǔ)句不會(huì)提升。因此上面的題目實(shí)際是等于如下代碼
//變量提升
var a; if(!(a in window)){ a = 1; } console.log(a)
變量a提升到頂部,第一句就相當(dāng)于window.a = undefined,所以在if語(yǔ)句中,判斷條件始終是false,因此a=1不會(huì)執(zhí)行,最終輸出undefined。
題2
var a = 1, b = function(){ x && a(--x); } console.log(a);
結(jié)果是1.
這道題考察的知識(shí)點(diǎn)是是具名函數(shù)表達(dá)式,聲名函數(shù)表達(dá)式是不攢在變量提升的,所以函數(shù)的定義不會(huì)被提前到頂部;而且聲名函數(shù)表達(dá)式的名字在外部訪問(wèn)時(shí)會(huì)報(bào)錯(cuò),只能函數(shù)內(nèi)部訪問(wèn)到。我們可以看看下面的例子。
var b = function a () {} b(); //調(diào)用正常 a();//typeError:a is not a function
題3
function a(x){ return x*2; } var a ; console.log(typeof a);
結(jié)果為 function
這道題目是的知識(shí)點(diǎn)是 函數(shù)聲明和變量聲明。 需要記住一點(diǎn)就是,在JavaScript中,函數(shù)聲明的優(yōu)先級(jí)高于變量聲明的優(yōu)先級(jí)。
因此在上述題中,由于優(yōu)先級(jí)的問(wèn)題,a會(huì)被定義為一個(gè)函數(shù),后面定義的變量不會(huì)生效,因此typeof的時(shí)候會(huì)返回function。
但是,需要注意的是,雖然函數(shù)聲明會(huì)覆蓋變量聲明,但不會(huì)覆蓋變量的賦值,我們將上面的代碼該下,就會(huì)發(fā)現(xiàn)這個(gè)特點(diǎn)。
function a(x){ return x*2; } var a = 1; console.log(typeof a);
上面的代碼會(huì)返回number。因?yàn)橘x值語(yǔ)句a= 1不會(huì)被覆蓋,所以a會(huì)是一個(gè)數(shù)字,而不是函數(shù),最終返回number。
題4
function b(x,y,a){ arguments[2] = 10; console.log(a); } b(1,2,3);
最終輸出的結(jié)果是10
但是,需要注意一種特殊情況,那就是嚴(yán)格模式,在嚴(yán)格模式下,arguments對(duì)象實(shí)際是函數(shù)參數(shù)的一個(gè)拷貝,實(shí)際指向的是不同的內(nèi)存空間,對(duì)arguments值的改變并不會(huì)影響到函數(shù)參數(shù)值。
所以在嚴(yán)格模式下輸出的是3
function a(){ console.log(this); } a.call(null);
輸出的結(jié)果是window對(duì)象。
這道題目考察的call方法,在js中,如果給call方法傳遞的第一個(gè)參數(shù)為null或者undefined,那么call方法中this會(huì)指向全局對(duì)象。
在瀏覽器環(huán)境中,全局對(duì)象為window;而在nodejs環(huán)境中全局對(duì)象為global,因此上述代碼如果在瀏覽器下運(yùn)行,會(huì)返回window。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93768.html
摘要:前端面試每日題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅(jiān)持的力量項(xiàng)目地址前端面試每日推薦歡迎跟一起折騰前端,系統(tǒng)整理前端知識(shí),目前正在折騰,打算打通算法與數(shù)據(jù)結(jié)構(gòu)的任督二脈。 《論語(yǔ)》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅(jiān)持 的力量...
摘要:前端面試每日題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅(jiān)持的力量項(xiàng)目地址前端面試每日推薦歡迎跟一起折騰前端,系統(tǒng)整理前端知識(shí),目前正在折騰,打算打通算法與數(shù)據(jù)結(jié)構(gòu)的任督二脈。 《論語(yǔ)》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅(jiān)持 的力量...
摘要:前端面試每日題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅(jiān)持的力量學(xué)習(xí)不打烊,充電加油只為遇到更好的自己,天無(wú)節(jié)假日,每天早上點(diǎn)純手工發(fā)布面試題死磕自己,愉悅大家。 今天的知識(shí)點(diǎn) (2019.08.20) —— 第126天 [html] 請(qǐng)說(shuō)說(shuō)Canvas和SVG圖形的區(qū)別是什么? [css] 說(shuō)說(shuō)你對(duì)hasLayout的理解,觸發(fā)hasLayou...
摘要:前端面試每日題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅(jiān)持的力量學(xué)習(xí)不打烊,充電加油只為遇到更好的自己,天無(wú)節(jié)假日,每天早上點(diǎn)純手工發(fā)布面試題死磕自己,愉悅大家。 今天的知識(shí)點(diǎn) (2019.08.10) —— 第116天 [html] 頁(yè)面布局中的結(jié)構(gòu)與表現(xiàn)分離,那么什么是結(jié)構(gòu)?什么是表現(xiàn)呢? [css] 怎么自定義鼠標(biāo)指針的圖案? [js] ...
摘要:學(xué)習(xí)不打烊,充電加油只為遇到更好的自己,天無(wú)節(jié)假日,每天早上點(diǎn)純手工發(fā)布面試題死磕自己。希望大家在這浮夸的前端圈里,保持冷靜,堅(jiān)持每天花分鐘來(lái)學(xué)習(xí)與思考。 今天的知識(shí)點(diǎn) (2019.08.30) —— 第136天 [html] HTML5的服務(wù)器(server-sent event)發(fā)送事件有什么應(yīng)用場(chǎng)景? [css] 你有了解css計(jì)數(shù)器(序列數(shù)字字符自動(dòng)遞增)嗎?如何通過(guò)css...
閱讀 3095·2021-10-13 09:40
閱讀 3945·2021-09-22 15:51
閱讀 1493·2021-09-22 15:48
閱讀 1060·2021-09-06 15:00
閱讀 1790·2019-08-30 15:43
閱讀 2356·2019-08-29 18:35
閱讀 1667·2019-08-29 16:18
閱讀 3612·2019-08-29 12:49