weixin_36670912 2016-11-28 11:16 采纳率: 87.5%
浏览 2825
已采纳

js查找一个未声明变量时,如a,与window.a的区别,为啥window.a不报错

查找一个未声明变量时,如a,与window.a的区别,为啥window.a不报错

  • 写回答

7条回答 默认 最新

  • 陈田田 2016-11-29 07:07
    关注

    先来看下代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <script type="text/javascript">
        window.onload = function(){
            console.log('打印window.a结果为:' + window.a);
            console.log('打印a' + a);
        }
    </script>
    </body>
    </html>
    

    按你所说,我们在未进行任何定义的情况下,分别打印window.a和a,结果如下:
    图片说明

    window.a结果是undefined,因为你想打印的是window对象的a属性,而window对象是JavaScript默认自带的对象,它是存在的,只不过是window对象中的属性a是不存在的。
    但是如果你想打印a,那么a会认为是一个变量,可是在我们的代码中并没有声明a,所以会捕获一个参数引用异常。

    这两种结果的主要原因是因为window对象是默认存在的对象,如果你再打印一下b.a,
    代码如下:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <script type="text/javascript">
        window.onload = function(){
            console.log('打印window.a结果为:' + window.a);
            console.log('打印b.a结果为:' + b.a);
        }
    </script>
    </body>
    </html>
    

    那么结果就是这样的:
    图片说明

    结果提示我们说b没有定义,而根本没有提到我们引用的后面的.a。

    综上所述,原因就是window对象比较特殊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题