js,變量未定義,什麼時候才會報錯?

 if(thisVariable){
//do sth.
}
 var thisVariable={};
if(thisVariable["thatProperty"]){
//do sth.
}

上面這行代碼,直接寫在js文件中,運行會報錯,第一個是變量未聲明,第二個是屬性未聲明。
可是,如果把這兩端代碼,放在一個函數中,則不會報錯。

function test(thisVariable){
if(thisVariable){
//do sth.
}

var thisVariable={};
if(thisVariable["thatProperty"]){
//do sth.
}
}
test();

誰能講下原因?
另外,能不能擴展地講下這方面的知識,總結一下

var申明的会预编译,初始值为undefined,放一起相当于下面的效果


    var thisVariabl=undefined
    var a = 10;
    if (thisVariable) {//undefined相当于false,不执行语句体
        //do sth.
    }

    thisVariable = {};
    if (thisVariable["thatProperty"]) {//没有键名称就是undefined
        //do sth.
    }

可以看这个:
javascript判断中为假的值
javascript运行机制浅析

贴出完整的代码,js是脚本语言,不会事先检查变量是否定义,要看代码的执行顺序。
这方面的知识,建议你系统地学学javascript,市面上介绍js语法的基础书有很多,耐心读一下。

Js中在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量。
就是你用的变量没有声明,直接用的话,那么这个变量就成了全局变量了,所以也不会出错的。只是结果可能不合理。

 if(itsUndefined){
  //上面会报错
}
if(window.itsUndefined){
  //上面不会报错
}

能解释一下这个吗