• 一个挺有意思的Javascript小问题


    先来看以下3段代码

     1 var firstName = "Mark";
    2 (function DisplayFirstName() {
    3 console.log(firstName);
    4 })();//必然输出 Mark
    5
    6 var lastName = "Aut";
    7 (function DisplayLastName() {
    8 var lastName = "Bru";
    9 console.log(lastName);
    10 })();//必然输出 Bru, 本地作用域的优先级高于全局作用域
    11
    12 //那么下面这段代码呢?
    13
    14 var lastName = "Aut";
    15 (function DisplayLastName() {
    16 console.log(lastName);
    17 var lastName = "Bru";
    18 console.log(lastName);
    19 })();//谁能猜出结果是什么?

    这个输出的结果是:

    LOG: undefined

    LOG: Bru

    这出乎了我的意料, 我原来以为应该是 "Aut"  和 "Bru"的

    我原来的理解是: 在程序第一个输出lastName的时候, 程序没有找到本地声明的lastName变量,所以使用了全局的lastName定义, 第二次的时候才使用本地变量的值

    (因为在我的概念里,javascript是解释型语言,一句一句的......执行)

    看到这个结果,看来javascript的执行并不都是顺序的..

    目前为止,就我的猜测,javascript执行应该是先做语法分析,然后顺便分析完成了变量表(本地和全局)

    然后才开始顺序执行一行行脚本

    还请各位javascript高手解惑

  • 相关阅读:
    [Effective JavaScript 笔记]第54条:将undefined看做“没有值”
    [Effective JavaScript 笔记]第53条:保持一致的约定
    UDP打洞原理介绍
    Uboot启动分析之Start.S
    MMU
    linux_shell
    SSH2配置
    线程同步
    C#线程基础
    客户端服务器通讯常用的一种方法——Marshal类
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/2191519.html
Copyright © 2020-2023  润新知