1. # this 面试题

    # this 指向

    • 题目







     

     

     

    this.age = 9;
    var melon = {
      age: 81,
      get_age: function () {
        return this.age;
      }
    };
    melon.get_age();   //问题一  
    var get_age1 = melon.get_age;
    get_age1();        //问题二 
    var get_age2 = get_age1.bind(melon);
    get_age2();        //问题三 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    • 题目














     
     

    var x = 10;
    
    function melon() {
      return this.x;
    }
    
    let obj = {
      x: 21,
      y: function () {
        return melon();
      },
      z: melon
    }
    
    console.log(obj.y());   // 问题一
    console.log(obj.z());   // 问题二
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    • 题目











     


    function melon() {
      let arr = [];
      for (var i = 0; i < 3; i++) {
        arr[i] = function () {
          return i;
        }
      }
      return arr;
    }
    let res = melon();
    res.forEach(item => {
      item();		// 问题一
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    • 题目










     
     

    function melon() {
        var res = new Array();
        for(var i = 0; i < 10; i++) {
            res[i] = function() {
                return i;
            }
        }
        return res;
    }
    var bgg = melon();
    bgg[5]();  //问题一
    bgg[10];   //问题二
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    • 题目
    function Foo() {
        var i = 0;
        return function() {
            console.log(i++);
        }
    }
    
    var f1 = Foo(),
        f2 = Foo();
    f1();
    f1();
    f2();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    • 题目
    var bb = 1;
    function aa(bb) {
        bb = 2;
        alert(bb);
    };
    aa(bb);
    alert(bb);
    
    1
    2
    3
    4
    5
    6
    7
    • 题目
    async function async1() {
      console.log('async1 start')
      await async2()
      console.log('async1 end')
    }
    
    async function async2() {
      console.log('async2')
    }
    console.log('script start')
    setTimeout(function () {
      console.log('settimeout')
    })
    
    async1()
    new Promise(function (resolve) {
      console.log('promise1')
      resolve()
    }).then(function () {
      console.log('promise2')
    })
    
    console.log('script end')
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    • 题目
    (async () => {
        console.log(1);
        setTimeout(() => {
            console.log(2);
        }, 0)
        await new Promise((resolve, reject) => {
            console.log(3);
        }).then(() => {
            console.log(4);
        });
        console.log(5);
    })();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    • 题目
    for (let i = 0; i <= 2; i++) {
      console.log(i);
      setTimeout(() => {
     	 console.log(i);
      }, 0);
    }
    
    1
    2
    3
    4
    5
    6
    • 题目
    console.log('a');
    setTimeout(() => {
    	console.log('b');
    }, 0);
    Promise.resolve().then(() => {
    	console.log('c');
    }).then(() => {
    	console.log('d');
    })
    console.log('e');
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    • 题目
    async function async1() {
      console.log('async1 start');
      await async2();
      console.log('async1 end');
    }
    async function async2() {
      console.log('async2');
    }
    console.log('script start');
    setTimeout(function () {
      console.log('setTimeout');
    }, 0)
    async1();
    new Promise(function (resolve) {
      console.log('promise1');
      resolve();
    }).then(function () {
      console.log('promise2');
    });
    console.log('script end');
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    • 题目
    window.name = 'window';
    var person1 = {
      name: 'person1',
      f001: function () {
        console.log(this.name);
      },
      f002: () => console.log(this.name),
      f003: function () {
        return function () {
          console.log(this.name);
        };
      },
      f004: function () {
        return () => {
          console.log(this.name);
        };
      },
    };
    var person2 = { name: 'person2' };
    
    function fn() {
      return 123;
    }
    
    person1.f003()();
    person1.f004()();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26