美文网首页
做点JS代码题(函数)

做点JS代码题(函数)

作者: 韩佳宁 | 来源:发表于2016-06-25 01:52 被阅读0次

    代码题目

    1. 以下代码输出什么? (难度**)
        function getInfo(name, age, sex){
            console.log('name:',name);
            console.log('age:', age);
            console.log('sex:', sex);
            console.log(arguments);
            arguments[0] = 'valley';
            console.log('name', name);
        }
    
        getInfo('hunger', 28, '男');
        getInfo('hunger', 28);
        getInfo('男');
    
    

    分析如下

    function getInfo(name, age, sex){
        console.log('name:',name);//打印字符串 name,打印参数name的值
        console.log('age:', age);//打印字符串 age,打印参数 age的值
        console.log('sex:', sex);//打印字符串 sex,打印参数sex的值
        console.log(arguments);// 打印 arguments对象
        arguments[0] = 'valley';// 把arguments对象的第一个值赋值为 字符串valley
        console.log('name', name);//打印字符串 name,打印参数name的值
    }
    getInfo('hunger', 28, '男');
    // name:hunger
    // age:28
    // sex:男
    // name:valley
    getInfo('hunger', 28);
    // name:hunger
    // age:28
    // sex:undefined
    // name:valley
    getInfo('男');
    // name:男
    // age:undefined
    // sex:undefined
    // name:valley
    
    Paste_Image.png

    2 . 写一个函数,返回参数的平方和(难度**)

       function sumOfSquares(){
       }
       sumOfSquares(2,3,4);   // 29
       sumOfSquares(1,3);   // 10
    

    分析

    function sumOfSquares(a,b,c){
      if (a === undefined) {//计算之前先进行验证参数是否传入
        a = 0;
      }
      if (b === undefined) {
        b = 0;
      }
      if (c === undefined) {
        c = 0;
      }
    var l = a*a;//算平方
    var m = b*b;
    var n = c*c;
    console.log(l+m+n);//计算平方和
    }
    
    sumOfSquares(2,3,4);   // 29
    sumOfSquares(1,3);   // 10
    
    Paste_Image.png

    3 . 如下代码的输出?为什么 (难度*)

        console.log(a);
        var a = 1;
        console.log(b);
    

    分析

    
        var a;//变量提升,此时还是 undefined
        console.log(a);//undefined
        a = 1;
        console.log(b);// b 没有声明 b is not defined
    
    //显示结果为
    //undefined
    //b is not defined
    
    
    
    

    4 . 如下代码的输出?为什么 (难度*)

        sayName('world');
        sayAge(10);
        function sayName(name){
            console.log('hello ', name);
        }
        var sayAge = function(age){
            console.log(age);
        };
    

    分析

    function sayName(name){
        console.log('hello ', name);
    }
    var sayAge;
    
    sayName('world'); //   hello world
    sayAge(10);//在函数表达式之前sayAge()无法调用 ,sayAge还是undefined状态
    var sayAge = function(age){
        console.log(age);
    };
    sayName('world'); //   hello world
    
    //显示结果为
    //hello world
    //sayAge is not a function
    
    
    Paste_Image.png

    5 . 如下代码的输出?为什么 (难度**)

    
        function fn(){}
        var fn = 3;
        console.log(fn);
    
    

    分析

    function fn(){}
    var fn;
    fn = 3;
    console.log(fn);//3 函数fn被赋值操作覆盖掉了
    //显示结果为
    //3
    

    6 . 如下代码的输出?为什么 (难度***)

        function fn(fn2){
           console.log(fn2);
           var fn2 = 3;
           console.log(fn2);
           console.log(fn);
           function fn2(){
                console.log('fnnn2');
            }
         }
        fn(10);
    

    分析

    
    function fn(fn2){
        var fn2;//fn2 此时是 undefined 吗?未必!
               //因为这个位置的fn2的值(也是初始值)由传入的参数决定
        function fn2(){
             console.log('fnnn2');
         }
       console.log(fn2);//fn2此时是函数 //打印函数fn
       fn2 = 3;// fn2被赋值为3 之前的内容被3覆盖掉
       console.log(fn2);//打印3
       console.log(fn);//fn是啥呢?找遍当前作用域没找到,
                        //最后在上一层作用域找到了,fn个是函数 打印函数fn
    
     }
    fn(10);
    //显示结果为
    /*
    function fn2(){
    console.log('fnnn2');
    }
    3
     function fn(fn2){
     console.log(fn2);
        var fn2 = 3;
        console.log(fn2);
        console.log(fn);
        function fn2(){
        console.log('fnnn2');
         }
      }
      */
    
    Paste_Image.png

    7 . 如下代码的输出?为什么 (难度***)

        var fn = 1;
        function fn(fn){
             console.log(fn);
        }
        console.log(fn(fn));
    

    分析

    var fn;
    function fn(fn){
         console.log(fn);
    }
    fn = 1;    //函数fn被覆盖
    console.log(fn(fn));
    
    //显示结果为
    // fn is not a function
    
    
    Paste_Image.png

    8 . 如下代码的输出?为什么 (难度**)

        //作用域
        console.log(j);
        console.log(i);
        for(var i=0; i<10; i++){
            var j = 100;
        }
        console.log(i);
        console.log(j);
    

    分析

    var i;
    var j;
    console.log(j);//undefined
    console.log(i);//undefined
    for(var i=0; i<10; i++){//只有函数才能构成作用域
        var j = 100;
    }// i现在为10
    console.log(i);//10
    console.log(j);// 100
    
    
    //显示结果为
    //undefined
    //undefined
    //10
    //100
    
    Paste_Image.png

    9 . 如下代码的输出?为什么 (难度****)

        fn();
        var i = 10;
        var fn = 20;
        console.log(i);
        function fn(){
            console.log(i);
            var i = 99;
            fn2();  
            console.log(i);
            function fn2(){
                i = 100;
            }
        }
    

    分析

    
    var i;
    var fn;
    function fn(){
      var i;//在当前作用域下 i是 undefined
      function fn2(){
          i = 100;
      }
        console.log(i);//打印 i  此时i是 undefined
        i = 99;// i被赋值为99
        fn2();  //调用函数fn2() i被赋值为100
        console.log(i);  //100
    }
    fn();
    i = 10;//i被赋值为10
    fn = 20;//fn被赋值为20
    console.log(i);// 10
    
    //显示结果为
    // undefined
    //100
    //10
    
    Paste_Image.png

    10 . 如下代码的输出?为什么 (难度*****)

        var say = 0;
        (function say(n){
            console.log(n);
            if(n<3) return;
            say(n-1);
        }( 10 ));
        console.log(say);
    

    分析

    var say;
    say = 0;
    (
      function say(n){
        var n;
        console.log(n);//打印n 此时n 的值是参数传入值
    
        if(n<3) return;
    
        say(n-1);
    }( 10 )
    );//立即执行函数内的东西都是封闭的,对外界环境没有影响
    // 10
    //  9
    //  8
    //  7
    //  6
    //  5
    //  4
    //  3
    //  2
    
    console.log(say);//
    
    //显示结果为
    // 10 9 8 7 6 5 4 3 2 0
    
    
    Paste_Image.png

    相关文章

      网友评论

          本文标题:做点JS代码题(函数)

          本文链接:https://www.haomeiwen.com/subject/kgnwdttx.html