摘要:另一個問題,就是我下面要提及的作用域問題,我當時思考的時間太久了這是回憶中的面試題實際略有差異,不糾結了說一下腳本的運行結果引用錯誤中給出的錯誤提示。
版權聲明:此文首發于我的簡書賬號人生還有多少個二十年,轉載請注明出處。
此處有幾百字嘮叨:
當天,我早早起床,跨越上百公里,高德導航,路人指點,跌跌撞撞到達招聘會現場,當時已是中午十二點半,吃了午餐(半瓶白開水),開始準備投遞簡歷。繞場2周,發現能提供我想要的崗位(前端開發)的公司有十家左右。我總共帶了5份簡歷,投遞了4家中意的公司,其中2家直接現場面試。
先說說最糟糕的那場面試: “我是來應聘Web開端的” (然后面試官糾正了一下,“Web前端”,尷尬了)。面試官接著就我的簡歷提了若干問題,基本上對簡歷的提問,未涉及技術細節,其中有“你github上的代碼有人看嗎?”(我又尷尬了,github上傳的只是我自己做過的一些作品,上傳的目的只是為了讓HR能夠看到我寫的代碼,從未在其它地方提及我有github賬號,自然是沒人訪問了)。當時因為緊張,還有近期睡眠不足,頭腦很遲鈍,問題大多回答得一塌糊涂。
另一場面試,面試官應該就是該公司的技術人員,提問的都是技術問題,問題不難,我基本上都會,因為自己平時也認真總結過一些,所以大多數回答地還算流暢。其中有兩個問題把我的臉都丟光了。一個是,“處理過瀏覽器的哪些兼容性問題”,我想了一兩分鐘居然還是想不出(腦子短路了)。學了一年多前端的我真沒接觸過兼容性問題嗎?其實,我接觸過的有不少,聽說過的也有不少,例子那么多,可是當時居然想不出一個例子來(腦子短路了)。另一個問題,就是我下面要提及的作用域問題,我當時思考的時間太久了...
(實際略有差異,不糾結了):
function foo(){ var a = b = 2; } foo(); alert(a); alert(b);
question:說一下腳本的運行結果?
answer: 引用錯誤(FF中給出的錯誤提示:ReferenceError: a is not defined)。
reason:函數內聲明的變量的作用域為函數作用域,在全局作用域中不能直接訪問到函數內變量的值;而在函數中未聲明就賦值的變量,在非嚴格模式下變成全局變量,成為window對象的一個屬性,在嚴格模式下則會報錯。此題的代碼相當于以下代碼:
var b = 2; function foo(){ var a =b; } foo(); alert(a); alert(b);
顯然,全局作用域中是沒有變量a的,所以alert(a)會導致錯誤,腳本無法繼續執行。
簡單的面試題已結束, 哈哈,現在讓我當一回面試官吧?
改編題1function foo(){ var a = b = 2; } foo(); alert(b); alert(a);
question: 說一下腳本運行的結果?
result:
alert(b); //2
alert(a); //ReferenceError: a is not defined
reason:原理同上
function foo(){ var a = b = 2; } foo(); alert(typeof a); alert(typeof b);
question: 說一下腳本運行的結果?
result:
alert(typeof a); //undefined
alert(typeof b); //number
attention: 未定義的變量的數據類型為undefined,并不會報錯。
var a = 1; var b = 1; function foo(b){ var a = b = 2; } foo(b); alert(a); alert(b);
question: 說一下腳本運行的結果?
result:
alert(a); //1
alert(b); //1
reason:這里我主要說一下b的結果,函數中參數中有變量b,相當于在函數中聲明了變量b,調用函數的時候,由于基本類型的變量值是按值傳遞的,所以,函數的局部變量b被賦值為1,接著,又對局部變量b的值進行了更新,但這并不會影響全局變量b的值,故全局變量b的值仍然為1
var a = 1; var b = 1; function foo(a,b){ arguments[0]=2; arguments[1]=2; b = 3; console.log(a); console.log(b); } foo(a,b); alert(a); alert(b);
question: 說一下腳本運行的結果?
result:
console.log(a); //2
console.log(b); //3
alert(a); //1
alert(b); //1
reason: 此處我主要說一下arguments對象,它是函數的一個實參對象,是一個類數組,有length屬性,并且也可以通過數組表示法獲取指定索引值的元素,甚至可以被修改(簡言之,arguments對象的值可讀、可寫),對arguments對象的修改直接同步到存放實參的各個變量。
foo(); alert(a); alert(b); function foo(){ a = b = 2; }
question: 說一下腳本運行的結果?
result:
alert(a); //2
alert(b); //2
question:函數未聲明,就調用,怎么不會報錯?
reason:這是因為聲明被提前了(hoisting
),聲明被提升到作用域的頂部,此處,即全局作用域的頂部,在foo()之前。代碼相當于:
function foo(){ a = b = 2; } foo(); alert(a); alert(b);改編題6
var a = 1; var b = 1; foo(); alert(a); alert(b); var foo = function(){ var a = b = 2; }
question: 說一下腳本運行的結果?
result:
TypeError: foo is not a function
reason: 這里使用函數定義表達式,要清楚的是,聲明是會提前的,但賦值卻不會。換句話說,函數調用的時候,foo已經存在了(不信,你可以試試alert(foo);),但是,它的值是undefined。所以,這里就出現了類型錯誤。順便提一下,undefined和null沒有任何的屬性和方法。
END
這是我的github網址,初學者可以看一下,應該會有所幫助。也歡迎大牛們蒞臨指導。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91315.html
摘要:想必面試題刷的多的同學對下面這道題目不陌生,能夠立即回答出輸出個,可是你真的懂為什么嗎為什么是輸出為什么是輸出個這兩個問題在我腦邊縈繞。同步任務都好理解,一個執行完執行下一個。本文只是我對這道面試題的一點思考,有誤的地方望批評指正。 想必面試題刷的多的同學對下面這道題目不陌生,能夠立即回答出輸出10個10,可是你真的懂為什么嗎?為什么是輸出10?為什么是輸出10個10?這兩個問題在我腦...
摘要:下面我們來使用面向對象類圖這里就不再畫了首先面試題中所提到的我們都可以看成類,比如停車場是一個類吧,它里面的車位是一個類吧,攝像頭,屏幕。。。 以下是某場的一道面試題(大概): 1、一個停車場,車輛入場時,攝像頭記錄下車輛信息2、屏幕上顯示所接收的車輛的信息情況(車牌號)以及各層車位的車位余量3、停車場一共四層車位,其中的三層都為普通車位,還有一層為特殊車位(體現在停車計費價格上面的不...
摘要:下面我們來使用面向對象類圖這里就不再畫了首先面試題中所提到的我們都可以看成類,比如停車場是一個類吧,它里面的車位是一個類吧,攝像頭,屏幕。。。 以下是某場的一道面試題(大概): 1、一個停車場,車輛入場時,攝像頭記錄下車輛信息2、屏幕上顯示所接收的車輛的信息情況(車牌號)以及各層車位的車位余量3、停車場一共四層車位,其中的三層都為普通車位,還有一層為特殊車位(體現在停車計費價格上面的不...
摘要:下面我們來使用面向對象類圖這里就不再畫了首先面試題中所提到的我們都可以看成類,比如停車場是一個類吧,它里面的車位是一個類吧,攝像頭,屏幕。。。 以下是某場的一道面試題(大概): 1、一個停車場,車輛入場時,攝像頭記錄下車輛信息2、屏幕上顯示所接收的車輛的信息情況(車牌號)以及各層車位的車位余量3、停車場一共四層車位,其中的三層都為普通車位,還有一層為特殊車位(體現在停車計費價格上面的不...
閱讀 2280·2021-11-23 09:51
閱讀 5672·2021-09-22 15:39
閱讀 3348·2021-09-02 15:15
閱讀 3499·2019-08-30 15:54
閱讀 2360·2019-08-30 15:53
閱讀 1400·2019-08-30 14:04
閱讀 2452·2019-08-29 18:33
閱讀 2371·2019-08-29 13:08