还有就是书上指出的一个问题在函数内部不使用var关键字定义的变量作为全局变量
function test(){
    str = "It's a fine day today!";
}window.onload = function(){
    alert(str);
};
我在运行上述代码时报错:str未定义但是使用如下却没有问题
window.onload = function(){
     alert(window.str);
};
是否在函数内部不使用var创建的变量, 在函数结束后作用域原因而导致无法使用
而此时JavaScrip解释器会在代码执行之前创建一个全局对象,比如此处的window
而str会作为此对象的一个属性保存下来
要访问这个变量,必须通过他的对象去访问??望老大们指点一二

解决方案 »

  1.   

    function test(){ 
        str = "It's a fine day today!"; 
    } -------------------------------------
    window.onload = function(){ //A
        alert(typeof(str)); 
    }; 
    window.onload = function(){ //B
        alert(typeof(window.str)); 
    }; 
    说实话这两个完全没有看到什么区别,
    数据类型完全一样,
      

  2.   

    function test(){
      str = "I Love You!";
    }
    alert(window.str);//undefined
    test();//要调用完后,才会定义这个变量
    alert(window.str);//I Love You!
      

  3.   

    "",null,false,undefind 这四个东西在一定在条件下可以转换.
    看样子 LZ 还是没有理解 JavaScript 闭包的概念.
      

  4.   

    好像不是哦
    function test(){ 
        str = "It's a fine day today!"; 
    }window.onload = function(){ 
        alert(window.str); 
    }; test()函数不被调用,使用window.str是可以直接打出str的值的
      

  5.   

    上述说的有误,不好意思哈
    如果说必须在test()调用后才存在此变量那书上指出的不使用var声明的变量JavaScript将会自动隐式声明,并且作为全局对象的属性
    那此处不是存在矛盾吗?
      

  6.   

    如果变量str没有定义,是undefined,很多地方会报异常
    如果调用window.str,就是找window的属性,找不到就是null,不调用其属性或者方法,就不会报异常另外我觉得""和0是一个特例,几乎就是同一个东东,isNaN("")返回也是false
    但null,undefined等都不一样
      

  7.   

    null 和 undefined 要看怎么比较了null === null
    undefined === undefined
    结果都是真undefined == null
    结果也是真NaN恒不等于任何值包含它自身应该是这样的
    就是"" 和 0有点迷糊