2 zzzcsd zzzcsd 于 2016.01.17 18:00 提问

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();

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

4个回答

showbo
showbo   Ds   Rxr 2016.01.18 10:25
已采纳

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


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

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

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

showbo
showbo 回复zzzcsd: 楼主可以找JavaScript权威指南(第6版)好好看下 3.10 变量作用域和8.6 闭包 这2章
接近 2 年之前 回复
showbo
showbo 回复zzzcsd: 第二个链接里面有介绍。var定义的变量都会预编译赋值为undefined。如果没有加var,相当于给window对象添加自定义属性,文章里面有说。当函数参数和函数内部定义的变量名称一致,参数名称实际也是用var变量定义,只是执行函数传递参数时才会给参数赋值。所以文章里面最后的示例会输出3,如果在var arg=2再加alert语句会输出2.
接近 2 年之前 回复
zzzcsd
zzzcsd 回复zzzcsd: 这里没法输入代码,看我自己回复自己的帖子
接近 2 年之前 回复
zzzcsd
zzzcsd if(){}
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.17 18:32

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

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.17 19:12

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

zzzcsd
zzzcsd   2016.01.19 18:00
 if(itsUndefined){
  //上面会报错
}
if(window.itsUndefined){
  //上面不会报错
}

能解释一下这个吗

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!