• this真题编译


    1 x y z分别输出的是什么?

    var x=1,

       y=z=0;

      function add(n){

        return n= n+1;

      };

     y=add(x);

     function add(n){

        return n=n+3

     };

     z=add(x);

     x=?y=?z=?

    考察点:预编译,有两个函数声明,函数的声明会被提升,所以第二个会把第一个覆盖,故x=1 y=4 z=4

    2 下列函数分别输出的是什么?

    function foo(x){

      console.log(arguments); // 打印实参

      return x;

    }

    foo(1,2,3,4,5);

    (function foo(x){

      console.log(arguments);

      return x;

    })(1,2,3,4,5);

    function foo(){

      bar.apply(null,arguments);//bar(arguments)

    };

    function bar(){

      console.log(arguments);

    };

    foo(1,2,3,4,5);

    3 下面函数会弹出什么?

    function b(x,y,a){

      arguments[2] = 10;

      alert(a)

    };

    b(1,2,3);

    function b(x,y,a){

       a = 10;

      alert(arguments[2])

    };

    b(1,2,3);

    两个打印的都是10,因为只要存在,形参和实参列表是相互映射一一对应的,形参改变,实参也会随之改变

    4 判断下面的类型

    var f=(

      function f(){

        return "1";

      },

      function g(){

        return 2;

      }

    )();

    typeof f ?

    首先我们要了解这个括号的意思 例如 var num=(1,2);这时候num就是2,如果var num = 1,2这样则会因为语法错误报错,所以这一题其实就是

    function g(){

      return 2;

    }();

    立即执行函数,返回值是2,判断之后则是typeof 2 number

    5 判断下面的输出值

    var x=1;
    if( function f(){} ){ //当判断玩之后能函数消失

      x+ = typeof f;这时候函数是undefined

    }

    console.log(x);

    6.判断下面弹出的值

    var name="222";

    var a={

      name:"111",

      say:function(){

        console.log(this.name);

      }

    }

    var fun = a.say;

    fun();

    a.say();

    var b={

      name:"333",

      say:function(fun){

        fun();

      }

    };

    b.say(a.say); //没人调用,里面指向的还是window

    b.say = a.say;

    b.say();

    7 实现阶乘

    方法1 : 函数调用

    function Fn(n){
      if(n <= 1){
      return 1;
    }
      return n * Fn(n-1);
    }
    Fn(5);

    方法2 : arguments.callee //严格模式下会报错

    var num=(function(n){
    if(n<=1){
      return 1;
    }
      return n*arguments.callee(n-1);//指向函数本身
    }(5))

    方法3:for循环

    function fn (num) {
    if (num < 0) {
    return -1;
    } else if (num === 0 || num === 1) {
    return 1;
    } else {
    for (var i = num - 1; i >= 1; i--) {
    num *= i;
    }
    }
    return num;
    };
    fn(6);

    方法4:while循环
    function fn (num) { 
    var result = num;
    if (num < 0) {
    return -1;
    } else if (num === 0 || num === 1) {
    return 1;
    } else {
    while (num > 1) {
    num--;
    result *= num;
    }
    }
    return result;
    };
    fn(6);

    8.

    var foo="123";

    function print(){

      var foo="456";

      this.foo = "789";

      console.log(foo)

    }

    print();

    var foo="123";

    function print(){

      this.foo = "789";

      console.log(foo)

    }

    print();//789

    var foo="123";

    function print(){

      this.foo = "789";

      console.log(foo)

    }

    new print();

    9.下面运行test()和new test()分别弹出什么?

    var a=5;
    function test(){
    a=0;
    alert(a);
    alert(this.a)
    var a;
    alert(a)
    }
    test();
    new test();

    new一个对象的意思是啥?

    function test(){

      var this = {

        __proto__:test.prototype;

      }//this上没有a 所以是undefined

      或者是

      var this = Object.creat(test.prototype)

    }

    10.

    var bar={ a : 001};

    function print(){  

      bar.a = 'a';

      Object.prototype.b = 'b''

      return function inner(){

        console.log(bar.a);

        console.log(bar.b);

      }

    }

    print()();//第一个括号执行return 第二个括号执行return里面的函数

  • 相关阅读:
    SSL/TLS原理详解
    HTTPS 为什么更安全,先看这些
    浏览器缓存策略
    HTTPS的中那些加密算法
    双飞翼圣杯布局
    Bootstrap中container与container-fluid的区别
    连接无线设备——与Wi-Fi直接连接
    Android网络通信之WiFi Direct
    【Android】 Android-wifi 直连 wifi direct wifi p2p
    django 过滤器 、日期格式化参数
  • 原文地址:https://www.cnblogs.com/xuniannian/p/8534590.html
Copyright © 2020-2023  润新知