JavaScript-9-变量声明、不声明直接age=1、age和window.age区别

  1. js中变量必须先声明再使用,可是

    age=1;
    console.log(age);
    

    并不会报错,因为 age=1; 时,此时是去window对象里去找age,没找到,则添加一个属性age,该属性age=1。

  2. age 和 window.age

    console.log(age);  
    console.log(window.age);
    

    第一句会报错,因为直接去找 栈 里找 age变量,没找到,报错。
    第二句不会报错,是去window对象中找age属性,没找到,不出错,为undefined;给window添加个age属性,但未初始化。

    这个问题涉及到动态属性的知识
    alert(this.color); //该属性存在,正常
    该属性在alert之前是不存在,但在alert时已经动态定义了color属性,只是还没有赋值。
    this.color定义属性color(此属性为动态属性),没有初始化,所以其值为undefined。所以alert(this.color)会弹出undefined。
    如果定义时就初始化alert(this.color=1),则会弹出1。

  3. window 为一个对象,放在堆中,weindow.age时,window有个age属性,指向栈中的对应地址
    JavaScript-9-变量声明、不声明直接age=1、age和window.age区别_第1张图片

你可能感兴趣的:(JavaScript)