• Javascript 权威指南第五版 手记(2) 变量的作用域


                                        作用域的一些问题

    写于平安夜

    见书本第四章,先用四段简单的脚本,来做个,实例测试

     示例1:

    var PH='you are big Pig Head';
    function getAlert()
    {
    alert(PH);
    }
    getAlert();

    函数体内显示PH这个全局变量
    这个比较好理解,结果如下
    you are big Pig Head 
    示例2:

    var PH='you are big Pig Head';
    function getAlert()
    {
    alert(PH);
    PH
    ='you are be modified to Mouse ';
    alert(PH)
    }
    getAlert();

    这里涉及到javascript的一个特性:

    如果给一个未用var声明的变量赋值,javascript会隐式声明该变量。但是该变量会被创建为全局变量。

    所以  分别显示

    you are big Pig Head

    you are be modified to Mouse

     示例3

    var PH='you are big Pig Head';
    function getAlert()
    {
    alert(PH);
    var PH = 't';
    }
    getAlert();


    这个结果是 undefined。比较怪。

    这里又涉及到一个javascript比较特别的东西:

    书上专业的词讲就是:javascript没有块作用域。对我这种块作用域都不知道是什么东西的人,这个解释不尽人意。所以更通俗的解释是:在函数中生命的 所有变量,无论在哪里声明的,在整个函数中都是有定义的。也就是哪怕在函数最结尾声明的,它实际上效果是在函数的最开头就声明了。


    从上面的例子来看,就是在alert(PH)的时候,从顺序看,貌似后面的var PH还没有声明,所以结果应该是显示全局声明的PH。而实际上后面那个var PH='t',在整个函数都是有“势力范围”的,所以相当于
    var PH='you are big Pig Head';

    Code



    这么看就明显能看出来,因为局部声明的PH变量,又由于局部变量的优先级高于同名的全局变量。所以这里声明完PH,又没有赋值,所以alert出来是 undefined

    当然要不出现undefined,就必须在alert前对它赋值,比如

    var PH='you are big Pig Head';
    function getAlert()
    {
    var PH = 'you are right';
    alert(PH);
    }
    getAlert();
    败家
  • 相关阅读:
    python 中classmethod修饰符、staticmethod和装饰器有什么区别
    zabbix4.0 监控 mysql5.7
    centos7 zabbix 自启动 设定
    生产环境 编译安装 zabbix 服务
    docker 环境 部署 centos7镜像 并配置免秘登陆
    dd 命令 磁盘写性能测试
    hdparm命令 硬盘读取速度压力测试
    zabbix 动态实时日志监控
    已经创建 且运行一段时间的docker容器 添加新的映射端口
    hive 锁表解决方案(unlock不掉的情况下)
  • 原文地址:https://www.cnblogs.com/loafer/p/1793252.html
Copyright © 2020-2023  润新知