javascript基础之经典面试题2

题目1:

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

            var a = 10

        }

        console.log(a)

        //上方的意思是如果在window中a为undefined或为null则为true

        //由于下方的var a=10是一个变量,具有变量的提升性此时的var a=undefined

        //所以就不会执行下方的代码,此时直接跳过,打印得到undefined

        // 解析:有var,不管所在的if中,条件是否成立,都会变量提升,都会有个var a = undefined 。也就是window.a = undefined.

        // 所以 'a' in window成立。所以if进不来,a没有被再次赋值,一直是undefined。


  var a = 9

        function fn() {

            a = 0

            return function (b) {

                return b + a++

            }

        }

        var f = fn()

        //此时将函数fn()的调用赋给了变量f

        console.log(f(5))

        //打印调用函数f()也就是fn()的调用此时B的值为5函数return返回输出的也就是b的值为5加上a的值

        // 因为a是先将值打印再给a进行重新赋值,所以返回的值为5,打印也就是5

        console.log(fn()(5))

        //调用函数fn  此时return的函数形参b的值也就是5,所以返回输出的值也就是5+0,因为这个调用的函数和上方的调用互不干扰,

        //打印的值也就是5

        console.log(f(5))

        //调用函数f() 此时b的值也就是5,由于上方已经完成函数的调用,此时a的值也就是1

        //打印的值也就是6

        console.log(a)

        // 由于上方完成了函数操作,此时a的值进行了重新的赋值上方的完成a++,此时得到的值也就是2



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

        function fn(ary) {

            ary[0] = 0

            ary = [0]

            ary[0] = 100

            return ary

        }

        var res = fn(ary)

        //执行上方的代码因为下方与上方数组形成了冲突也就是结束了函数,reture ary的值,得到了一个新的数组

        //所以这里输出的值也就是一个新的数组[0,2,3,4]

        console.log(ary)

        console.log(res)

        // //调用函数fn(),把这里的实参放入函数中,也就得到了ary=[0,2,3,4]

         //在接着执行的时候将数组的变成了一个数,在完成ary[0]=100,也就是给ary重新进行赋值100,所以输出的结果就是[100]

// ary[0] = 0 改变的是ary的第一个元素,ary是引用类型。ary = [0] 之后,

// ary已经和全局的ary切断了联系,因为重新开辟的内存空间,不再是同一个引用




        function fn(i) {

            return function (n) {

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

            }

        }

        var f = fn(10)

        //将调用函数的fn实参为10赋给了变量F,值为10

        f(20)

        //调用函数fn实参为10的数,此时n的值为20在加上i为10的值,也就是30

        fn(20)(40)

        //调用函数fn,此时实参为20,也就是函数fn的形参为i为20,再次调用也就是reture出去的函数

        //也就是这里的实参对应的就是上方函数实参的n,得到的值也就是60

        fn(30)(50)

        //调用函数fn,此时实参为30,也就是函数fn的形参为i为30,再次调用也就是reture出去的函数

        //也就是这里的实参对应的就是上方函数实参的n,得到的值也就是80

        f(30)

        //由于上方已经调用过i的值,所以此时i的值为11

        //return出去的函数的形参也就对应这里的调用的实参30,得到的值也就是41



  var num = 10

        var obj = {

            num: 20

        }

        obj.fn = (function (num) {

            this.num = num * 3//60

            num++ //21

            return function (n) {

                this.num += n  //65

                num++ //22

                console.log(num)

            }

        })(obj.num)

        var fn = obj.fn

        fn(5)

        //这里的函数是一种自适应函数,所以会立马执行,把这里的实参obj.num带到上方的形参Num

        //所以此时num也就等于了20  所以这里的this.num的值也就为60,因为这里的this指向的是window,所以上方var num也就等于了60

        //在执行下方的num++此时得到num的值为21,在完成下方返回输出的值num++以后得到的num的值也就是22

        obj.fn(10)

        //也就是此时的的10为一个实参对应的值为形参为n,所以此时的this指向的是obj得到的的num的值为

        //就是此时的this.num等于20,在加上n的值,也就得到了obj.num的值为30,此时num的值也就是在上一次调用的基础上在加1,得到23

        console.log(num, obj.num)

        //此时num也就是上方赋予的一个原先num为60是,再加上上方传参进入的5,也就是65

        //上方中obj.num的值为30



   var fullName = 'language'

        var obj = {

            fullName: 'javascript',

            prop: {

                getFullName: function () {

                    return this.fullName

                }

            }

        }

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

        //调用函数为getfullname,此时的this指向的是prop,而prop里面没有getfullname,所以此时得到的值也就是undefined

        var test = obj.prop.getFullName

        //将obj下面的prop下面的函数赋给变量test

        console.log(test())

        //调用函数test,此时的this指向的是window,所以此时输出的结果也就是language


  var name = 'window'

        var Tom = {

            name: "tom",

            show: function () {

                console.log(this.name)

                //此时的this指向的是window,所以得到的值也就是window

            },

            wait: function () {

                var fun = this.show

                //这里的this.show指向上方show函数

                fun()

                //再次调用函数

            }

        }

        Tom.wait()

        //调用函数对象名为Tom下面的wait

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342