• js 面试题总结


    面试题解析

    window.number = 1;
    var obj = {
        number: 4,
        dbl: (function(){
            console.log(obj.number);
            this.number *= 2;
            console.log(obj.number);
            return function () {
                this.number *= 2;
            }
        })()
    }
    var dbl = obj.dbl; 
    dbl();
    obj.dbl();
    console.log(window.number);
    console.log(obj.number);
    

    关键是this的指向问题,在 this 有所属对象时就指向所属对象,没有所属对象就指向全局对象。

    全体代码有两个作用域

    • 全局作用域 number 、 obj

    • 局部作用域 obj.nujber 、 obj.dbl

        var dbl = obj.dbl; 
      
    • obj.dbl 为立即执行函数

    • window.number = 1 * 2 = 2

    • 执行结果为一个匿名函数

    • function () { this.number *= 2; }

        dbl();
      
    • this ==> window

    • window.number = 2 * 2 = 4

        obj.dbl();
      
    • this ==> obj

    • obj.number = 4 * 2 = 8

        console.log(window.number);
      
    • 执行结果为 window.number = 4

        console.log(obj.number);
      
    • 执行结果为 obj.number = 8

    所以结果为 4,8

  • 相关阅读:
    Day 03
    Day 03 作业
    Day 02 作业
    Day 02
    Day 01
    Day 10 面向对象基础
    Spring学习-- Bean 的作用域
    一、基本知识
    cloud-init使用技巧
    如何在KVM中管理存储池
  • 原文地址:https://www.cnblogs.com/lvyongbo/p/9938114.html
Copyright © 2020-2023  润新知