• 关于js语法中的一些难点(预解析,变量提前,作用域)


    ******标题很吓人************

    其实就是一个小小的例子 ,从例子中简单的分析一下作用域、预解析和变量提前的概念

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>关于js中的那些小知识点</title>
        </head>
        <body>
        </body>
        <script>
        var a=1;
        function zero(){
            alert(a);
            var a=2;
            alert(a);
        }
        zero();
        </script>
    </html>

    你会看到这里的结果第一次弹窗是undefined  第二次是2

    也许会有人疑问为什么第一次弹出来不是1 呢?(知道的大神不要喷我)

    分析名词:作用域

    其实在javascript语言里只有函数是可以提供作用域,换句话说javascript里有且只有函数作用域,没有其他的作用域。因此要理解作用域必须从函数讲起!

    那么咱们说一下这个函数的作用域 

    函数的作用域(其实作用域可以理解为一个箱子,姑且这么理解吧就是一个封闭性的东西 而且很霸道,他可以拿外边人的东西,但是外边的人不能拿 箱子里的东西 想要拿必须经过同意)//xx 好像晦涩难懂

    分析名词:预解析(就像c语言一样你写完了代码不能直接运行你要编译一下  这个预解析很类似那个编译的过程)

    预解析就是电脑先看一边心里有个数 知道了那个是变量 那个是函数声明 函数中是否有局部变量 等等等等。。。

    分析名次:变量提前(顾名思义就是我声明的变量提前到了这个顶部【作用域的顶部】)

    咱们用一个例子解释一下变量提前(代码一和代码二的代码作用相似)

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>代码一</title>
        </head>
        <body>
        </body>
        <script>
        function zero(){
            alert(a);
            var a=2;
        }
        zero();
        </script>
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>代码二</title>
        </head>
        <body>
        </body>
        <script>
        function zero(){
            var a;//没有赋值的情况下默认是undefined
            alert(a);
        }
        zero();
        </script>
    </html>

    以上两个代码的作用是相似的也就是代码二就是变量提前的做法

    讲了这么多 也该说一下这个例子了

    从预解析开始讲解(因为电脑也是先预解析在执行的)

    首先 全部变量 声明了一个a=undefined

    然后声明了一个函数 zero  zero函数中还有一个局部变量a=undefined(到此解析完毕)

    然后开始执行  执行的当然是函数了。。。所以我们先看函数

    函数中变量的提前请看代码二  于是第一次弹出来就是undefined    弹出来undefined之后变量赋值了(对,你没看错就是赋值了) 那么再次执行的话就是2 (为什么不是1 因为函数中自己有变量啊 于是就覆盖了全局变量)

    举个例子说明 : 你要炒鸡蛋 你发现你的家中有鸡蛋 于是你就不会去买了 或者拿别人的了吧(不要钻牛角 说鸡蛋不够用啊)

    终于写完了    休息一下 

    ps:写的比较浅  希望大家能多多指点。。。

  • 相关阅读:
    win8 tips
    从win10体验到重装win8
    win10 体验 日志
    磁盘分区与多系统安装(windows ubuntu)
    使用ultraISO制作ISO镜像文件
    C++中const用法总结
    4月8号的打卡
    Java第二次作业
    第一次Java作业
    NX二次开发-改变自制UI界面大小
  • 原文地址:https://www.cnblogs.com/ling-du/p/4548412.html
Copyright © 2020-2023  润新知