zoukankan      html  css  js  c++  java
  • 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();
    败家
  • 相关阅读:
    错误:The columns and the margins do not fit the page width.
    jasperreport使用动态jason数据源
    DynamicReport使用XML数据源+ireport的.jxml文件作为模板
    Report bands中文版
    iReport 使用json 数据源
    bat设置java环境变量
    解决DynamicReports中含有中文pdf版本不显示
    vba实现excel二级联动多选功能
    打字游戏 C语言
    fpga 任意分频 奇偶数 分频
  • 原文地址:https://www.cnblogs.com/loafer/p/1793252.html
Copyright © 2011-2022 走看看