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