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();
    败家
  • 相关阅读:
    mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
    java:JDBC详解
    卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)
    卷积(转自wiki百科)
    windows10环境下安装Tensorflow
    3、继承与派生
    2、对象和类
    1、从C语言到C++
    使用Jupyter Notebook编写技术文档
    3、利用GDB进行程序调试
  • 原文地址:https://www.cnblogs.com/loafer/p/1793252.html
Copyright © 2011-2022 走看看