JS:笔试题(函数调用)

1、

        function sum() {
            if (arguments.length == 2) {
                return arguments[0] + arguments[1];
            } else if (arguments.length == 1) {
                var first = arguments[0];
                return function (second) {
                    return first + second;    
                };
            }
        }
        console.log(sum(2, 3));             
        console.log(sum(2)(3)); 

打印结果:

5

5

 

理解:

首先创建了一个sum函数,sum(2,3)调用时,传入了两个参数,分别为2,3,进入函数体内部后,遇到了一个if条件语句:判断参数的个数,为两个参数时:返回两个参数的和,后面的else if不再满足条件跳过,打印5。

第二个调用sum(2)(3),不满足第一个if,因为第一个调用的时sum(2),只有一个参数,sum(2)(3)的意思是sum(2)的返回值再调用并传入参数3,当2传入时,值被保存在first中,并返回了一个函数,这时再把3传入返回的那个函数中把之前first保存的值和传入的参数相加,打印5。

 

2、

        var fn = 90;
        var o = {
            fn: function () {
                console.log(fn);

            }
        }
        console.log(o.fn());

打印结果:

90

undefined

 

理解:

代码中有一个变量名和函数名重名,函数在对象o中,o访问了成员fn并调用,打印的fn访问的是全局变量fn = 90;因为函数的创建方式是fn:function(){};所以o.fn()不能直接使用函数;如果要直接使用函数,可以写成如下方式:

        var fn = 90;
        var o = {
            fn: function fm() {
                console.log(fm);
            }
        }
        console.log(o.fn());

 

3、

        var User = {
            count: 1,
            getCount: function () {
                return this.count;
            }
        }
        var fn = User.getCount;
        console.log(fn());

打印结果:

undefined

 

理解:同2

 

4、

        function fun(n, o) {
            console.log(o)
            return {
                fun: function (m) {
                    return fun(m, n);
                }
            };
        }
        var a = fun(0);
        a.fun(1);
        a.fun(2);
        a.fun(3);
        var b = fun(0).fun(1).fun(2).fun(3);

        var c = fun(0).fun(1);
        c.fun(2);
        c.fun(3);

打印结果:

undefined

0

0

0

undefined

0

1

2

undefined

0

1

1

解析:(自己理的,有错请指正)

        /*
        {a:隐式:var n = 0,var o;o打印-->undefined
            return{fun};
                a.fun(1);var m = 1;
                    return{fun(1,0)}
                    var n = 1;var o = 0;打印-->0
                    return{fun(m)}

                a.fun(2);var m = 2;
                    return{fun(2,0)}
                    var n = 2,var o = 0;打印-->0;
                    return{fun(m)}

                a.fun(3);var m = 3;
                    return{fun(3,0)}
                    var n = 3,var o = 0;打印-->0;
                    return{fun(m)}
        }
        {b:fun(0).fun(1)-->同上    ;打印-->undefined;
            fun(0).fun(1);var m = 1;
                return{fun(1,0)}
                var n = 1;var o = 0;打印-->0;
                return{fun(m)}
                    fun(2)
                    return fun(m,n) var m = 2,var n = 1;
                    fun(2,1);var n = 2;var o = 1;打印-->1;
                        return fun(m);var m = 3;n = 2;
                        return fun(3,2);
                            var n = 3,var o = 2;打印-->2;
        }
        {c:fun(0).fun(1)-->同上     ;打印-->undefined;
            return{fun};
                c.fun(1);var m = 1;
                    return{fun(1,0)}
                    var n = 1;var o = 0;打印-->0
                    return{fun(m)};var m = 2;var n = 1
                    return fun(2,1);
                        var n = 2,var o = 1;打印-->1
                    
                    return{fun(m)};var m = 3;var n = 1
                    return fun(3,1);
                        var n = 3; var o = 1;打印-->1
        }
        */

 

posted on 2022-06-21 21:28  香香鲲  阅读(163)  评论(0编辑  收藏  举报