2021-12-01 JS經(jīng)典面試題

/* console.log(a) ?//undefined

? ? ? ? var a = 12

? ? ? ? function fn() {

? ? ? ? ? ? console.log(a) ?//undefined

? ? ? ? ? ? var a = 13

? ? ? ? }

? ? ? ? fn()

? ? ? ? console.log(a) ?//12 */

? ? ? ? /* console.log(a) ?//undefined

? ? ? ? var a = 12

? ? ? ? function fn() {

? ? ? ? ? ? //注意:當(dāng)前作用域里面沒有a,就會(huì)到上一層作用域里面去尋找a

? ? ? ? ? ? console.log(a) //12

? ? ? ? ? ? a = 13

? ? ? ? }

? ? ? ? fn()

? ? ? ? console.log(a) //13 */

? ? ? ? /* // console.log(a) ?//報(bào)錯(cuò)

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

? ? ? ? function fn() {

? ? ? ? ? ? // console.log(a) ?//報(bào)錯(cuò),注意:只要是當(dāng)前作用域里面的存在的變量,就不會(huì)去上層作用域找了

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

? ? ? ? }

? ? ? ? fn()

? ? ? ? console.log(a) */

? ? ? ? /* // console.log(a) ?//報(bào)錯(cuò)

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

? ? ? ? function fn() {

? ? ? ? ? ? // console.log(a) ?//報(bào)錯(cuò)

? ? ? ? ? ? let a = 13

? ? ? ? }

? ? ? ? fn()

? ? ? ? console.log(a) */

? ? ? ? /* var foo = 1

? ? ? ? function bar() {

? ? ? ? ? ? if (!foo) {

? ? ? ? ? ? ? ? var foo = 10 ?//這個(gè)foo會(huì)提升到當(dāng)前作用域的頂部定義

? ? ? ? ? ? }

? ? ? ? ? ? console.log(foo) ?//10

? ? ? ? }

? ? ? ? bar() */

? ? ? ? /* var foo = 1

? ? ? ? function bar() {

? ? ? ? ? ? if (!foo) {

? ? ? ? ? ? ? ? foo = 10

? ? ? ? ? ? }

? ? ? ? ? ? console.log(foo) ? //1

? ? ? ? }

? ? ? ? bar() */

? ? ? ? /* 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 */

? ? ? ? /* var a = 10

? ? ? ? var b = 11

? ? ? ? var c = 12

? ? ? ? function test(a) {

? ? ? ? ? ? a = 1

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

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

? ? ? ? }

? ? ? ? test(10)

? ? ? ? console.log(a) ?// 10

? ? ? ? console.log(b) ?// 11

? ? ? ? console.log(c) ?// 3 */

? ? ? ? /* // in關(guān)鍵字,用于檢查一個(gè)屬性是否包含在指定的對(duì)象中,如果包含就返回true

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

? ? ? ? ? ? var a = 10

? ? ? ? }

? ? ? ? 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方法,沒有返回任何內(nèi)容,默認(rèn)返回undefined

? ? ? ? console.log(a) ?//undefined */

? ? ? ? /* var a = 9

? ? ? ? function fn() {

? ? ? ? ? ? // 1 2

? ? ? ? ? ? a = 0 ?

? ? ? ? ? ? return function (b) {

? ? ? ? ? ? ? ? // ? ? 5 + 1

? ? ? ? ? ? ? ? // ? ? 5 + 0

? ? ? ? ? ? ? ? return b + a++

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? var f = fn()

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

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

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

? ? ? ? console.log(a) //2 */

? ? ? ? /* var ary = [1, 2, 3, 4]

? ? ? ? function fn(ary) {

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

? ? ? ? ? ? ary = [0] ? ?// arr形參重新賦值一個(gè)新的數(shù)組

? ? ? ? ? ? ary[0] = 100 // 形參arr再修改第一個(gè)位置的值,就跟原數(shù)組沒關(guān)系

? ? ? ? ? ? return ary

? ? ? ? }

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

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

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

? ? ? ? /* // ? ? ? ? ?10->11

? ? ? ? function fn(i) {

? ? ? ? ? ? // ? ? ? ? ? ? ? 30

? ? ? ? ? ? return function (n) {

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

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? var f = fn(10)

? ? ? ? f(20) ? //30

? ? ? ? fn(20)(40) ?//60

? ? ? ? fn(30)(50) ?//80

? ? ? ? f(30) //41 */

? ? ? ? /* var num = 10 ?//60 ?65

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

? ? ? ? // ? ? ? ? ? ? ? ? ? 20 ?21

? ? ? ? obj.fn = (function (num) {

? ? ? ? ? ? //this->window

? ? ? ? ? ? this.num = num * 3

? ? ? ? ? ? num++ // 21

? ? ? ? ? ? // ? ? ? ? ? ? ? 10

? ? ? ? ? ? return function (n) {

? ? ? ? ? ? ? ? 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

? ? ? ? obj.fn(10) //23

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

? ? ? ? /* var fullName = 'language'

? ? ? ? var obj = {

? ? ? ? ? ? fullName: 'javascript',

? ? ? ? ? ? prop: {

? ? ? ? ? ? ? ? getFullName: function () {

? ? ? ? ? ? ? ? ? ? return this.fullName

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

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

? ? ? ? // 將getFullName方法傳給test

? ? ? ? var test = obj.prop.getFullName

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

? ? ? ? // var定義的變量會(huì)成為window的屬性

? ? ? ? var name = 'window'

? ? ? ? var Tom = {

? ? ? ? ? ? name: "tom",

? ? ? ? ? ? show: function () {

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

? ? ? ? ? ? },

? ? ? ? ? ? wait: function () {

? ? ? ? ? ? ? ? var fun = this.show

? ? ? ? ? ? fun()

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? Tom.wait() ?// window

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容