2021-11-28

javascript經典面試題16道

第1題.

console.log(a)?

var a = 12

function fn() {

? console.log(a)

? var a = 13

}

fn()

console.log(a)?

第2題.

console.log(a)

var a = 12

function fn() {

console.log(a)

a = 13

}

fn()

console.log(a)

第3題.

console.log(a)?

let a = 12?

function fn() {

? console.log(a)?

? let a = 13?

fn()

console.log(a)

解析:

console.log(a)? //報錯

let a = 12? //let定義的變量补鼻,不存在提升

function fn() {

? console.log(a)? //報錯哄啄,注意:只要是當前作用域里面的存在的變量,就不會去上層作用域找了

? let a = 13? //let定義的變量风范,不存在提升

}

fn()

console.log(a)

第4題.

console.log(a)?

a = 12?

function fn() {

console.log(a)

let a = 13

}

fn()

console.log(a)

解析:

console.log(a)? //報錯

a = 12? // 定義變量可以不使用任何關鍵字咨跌,但是在定義該變量之前,不能使用該變量(這是一種不規(guī)范寫法)

function fn() {

console.log(a)? //報錯

let a = 13

}

fn()

console.log(a)

第5題.

var foo = 1

function bar() {

? if (!foo) {

? var foo = 10?

? }

console.log(foo)

}

bar()

解析:

var foo = 1

function bar() {

? if (!foo) {

? var foo = 10? //這個foo會提升到當前作用域的頂部定義

? }

console.log(foo)? //10

}

bar()

第6題.

var foo = 1

function bar() {

? if (!foo) {

? ? foo = 10

? }

console.log(foo)?

}

bar()

解析:

第7題.

var n = 0

function a() {

? var n = 10?

? function b() {

? ? ? n++?

? console.log(n)?

? }

? b()

? return b

}

var c = a()

c()

console.log(n)?

解析:

var n = 0

function a() {

? var n = 10? //11? 12

? function b() {

? ? ? ? n++? //11? 12

? ? console.log(n)? //11? 12

? }

? b()

? return b

}

var c = a()

c()

console.log(n)? // 0

第8題.

var a = 10

var b = 11

var c = 12

function test(a) {

? ? a = 1

? ? var b = 2?

? ? c = 3?

}

test(10)

console.log(a)?

console.log(b)?

console.log(c)?

解析:

var a = 10

var b = 11

var c = 12

function test(a) {

? ? a = 1

? ? var b = 2? //方法里面的作用域b是2

? ? c = 3? //會將外層作用域的c的值換掉

}

test(10)

console.log(a)? // 10

console.log(b)? // 11

console.log(c)? // 3

第9題.

if (!('a' in window)) {

? ? ? var a = 10

}

console.log(a)

解析:

// in關鍵字硼婿,用于檢查一個屬性是否包含在指定的對象中锌半,如果包含就返回true

if (!('a' in window)) {

? ? ? var a = 10

}

console.log(a) //undefined

第10題.

var a = 4

function b(x, y, a) {

? console.log(a)

? arguments[2] = 10?

? console.log(a)?

}

a = b(1, 2, 3)?

console.log(a)?

解析:

var a = 4

function b(x, y, a) {

? console.log(a)? // 打印形參的值 3

? arguments[2] = 10? // 又將形參a改成而來 10

? console.log(a)? // 10

}

a = b(1, 2, 3)? //b方法,沒有返回任何內容寇漫,默認返回undefined

console.log(a)? //undefined

第11題.

var a = 9

function fn() {

? a = 0?

? return function (b) {

? ? ? return b + a++

? }

}

var f = fn()

console.log(f(5))?

console.log(fn()(5))

console.log(f(5))?

console.log(a)

解析:

var a = 9

function fn() {

? ? a = 0? // 1 2

? ? return function (b) {

? ? ? ? return b + a++? 第一次// 5 + 0? ? 第二次//? 5 + 1

? ? }

}

var f = fn()

console.log(f(5))? //5

console.log(fn()(5))? //5

console.log(f(5))? //6

console.log(a) //2

第12題.

var ary = [1, 2, 3, 4]

function fn(ary) {

? ? ary[0] = 0?

? ? ary = [0]? ?

? ? ary[0] = 100

? ? return ary

}

var res = fn(ary)?

console.log(ary)? ?

console.log(res)?

解析:

var ary = [1, 2, 3, 4]

function fn(ary) {

? ? ary[0] = 0? // 修改了原數組中第一位的值

? ? ary = [0]? ? // arr形參重新賦值一個新的數組

? ? ary[0] = 100 // 形參arr再修改第一個位置的值刊殉,就跟原數組沒關系

? ? return ary

}

var res = fn(ary)? // [100]

console.log(ary)? ? // [0,2,3,4]

console.log(res)? // [100]

第13題.

function fn(i) {

? return function (n) {

? console.log(n + i++)?

? }

}

var f = fn(10)

f(20)?

fn(20)(40)?

fn(30)(50)?

f(30)

解析:

function fn(i) {? //10->11

? ? return function (n) {? //30

? ? console.log(n + i++)? //41

? ? }

}

var f = fn(10)

f(20)? //30

fn(20)(40)? //60

fn(30)(50)? //80

f(30) //41

第14題.

var num = 10?

var obj = { num: 20 }

obj.fn = (function (num) {

? ? this.num = num * 3

? ? num++

? ? return function (n) {

? ? ? ? this.num += n?

? ? ? ? num++?

? ? ? ? console.log(num)?

? ? }

})(obj.num)

var fn = obj.fn

console.log(fn)?

fn(5)?

obj.fn(10)

console.log(num, obj.num)

解析:

var num = 10? //60=>65

var obj = { num: 20 }? //=>30

obj.fn = (function (num) {? //20=>21

? ? this.num = num * 3? //this->window

? ? num++ // 21

? ? return function (n) { //10

? ? ? ? this.num += n? // 30

? ? ? ? num++? //22=>23

? ? ? ? console.log(num)? //22=>23

? ? }

})(obj.num)

var fn = obj.fn

console.log(fn)? //function(n){this.num +=n;num++;console.log(num)}

fn(5)? // 22 //此時this->window fn(5) = window.fn(5)

obj.fn(10) //23 此時this=>obj,所以this.name = 20

console.log(num, obj.num) //65 30

第15題.

var fullName = 'language'

var obj = {

? fullName: 'javascript',

? prop: {

? ? ? ? getFullName: function () {

? ? ? ? ? ? return this.fullName

? ? ? ? }

? }

}

console.log(obj.prop.getFullName())

var test = obj.prop.getFullName

console.log(test())?

解析:

var fullName = 'language'

var obj = {

? ? fullName: 'javascript',

? ? prop: {

? ? ? ? getFullName: function () {

? ? ? ? ? ? return this.fullName

? ? ? ? }

? ? }

}

console.log(obj.prop.getFullName())? // undefined

var test = obj.prop.getFullName // 將getFullName方法傳給test

console.log(test())? // language

第16題.

var name = 'window'

var Tom = {

? name: "tom",

? show: function () {

? ? console.log(this.name)

? },

? wait: function () {

? ? ? var fun = this.show

? ? ? fun()

? }

}

Tom.wait()?

解析:

var name = 'window' // var定義的變量會成為window的屬性

var Tom = {

? name: "tom",

? show: function () {

? ? ? console.log(this.name)? // window

? },

? wait: function () {

? ? ? var fun = this.show

? ? ? fun()

? }

}

Tom.wait()? // window

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末殉摔,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子冗澈,更是在濱河造成了極大的恐慌钦勘,老刑警劉巖陋葡,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亚亲,死亡現場離奇詭異,居然都是意外死亡腐缤,警方通過查閱死者的電腦和手機捌归,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岭粤,“玉大人惜索,你說我怎么就攤上這事√杲剑” “怎么了巾兆?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虎囚。 經常有香客問我角塑,道長,這世上最難降的妖魔是什么淘讥? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任圃伶,我火速辦了婚禮,結果婚禮上蒲列,老公的妹妹穿的比我還像新娘窒朋。我一直安慰自己,他們只是感情好蝗岖,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布侥猩。 她就那樣靜靜地躺著,像睡著了一般抵赢。 火紅的嫁衣襯著肌膚如雪拭宁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天瓣俯,我揣著相機與錄音杰标,去河邊找鬼。 笑死彩匕,一個胖子當著我的面吹牛腔剂,可吹牛的內容都是我干的。 我是一名探鬼主播驼仪,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掸犬,長吁一口氣:“原來是場噩夢啊……” “哼袜漩!你這毒婦竟也來了?” 一聲冷哼從身側響起湾碎,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宙攻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后介褥,有當地人在樹林里發(fā)現了一具尸體座掘,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年柔滔,在試婚紗的時候發(fā)現自己被綠了溢陪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡睛廊,死狀恐怖形真,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情超全,我是刑警寧澤咆霜,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站嘶朱,受9級特大地震影響蛾坯,放射性物質發(fā)生泄漏。R本人自食惡果不足惜见咒,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一偿衰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧改览,春花似錦下翎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庆揩,卻和暖如春俐东,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背订晌。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工虏辫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锈拨。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓砌庄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子娄昆,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容

  • 十佩微、函數補充以及初識對象 1.arguments arguments對象里面保存這方法的所有參數。argument...
    默默_01cf閱讀 106評論 0 0
  • 十一萌焰、對象進階 1.this (1).構造函數里面的this哺眯,用于給類定義成員(屬性和方法) (2).方法里面的t...
    默默_01cf閱讀 149評論 0 0
  • console.log(a) //undefined var a = 12 function f...
    林楊木閱讀 215評論 0 1
  • 八、初識函數 1.定義 function 是定義函數的關鍵字扒俯,函數也稱為方法 奶卓。 函數分為:1.無參函數 2.帶...
    默默_01cf閱讀 281評論 0 0
  • /console.log(a) //undefined var a = 12 functio...
    可能有貓餅閱讀 195評論 0 0