zoukankan      html  css  js  c++  java
  • 关于对javascript 提升概念 的总结与思考。

    最近在看一本新买的书叫《你不知道的javascript上卷》。。买到这本书也算是个巧合 不过真是物有所值。它对js的几个高级概念都做了非常深刻的描述和通过一些通俗易懂的方式来让我们理解。这篇文就是解决了 一直困扰我的js申明提升的问题。 下面就是我的一些总结和一些笔记。

    首先来看一个 例子。

    a= 2;
    var a;
    console.log(a);

    看到 这个例子 就让我想到 一直困扰我的一直没有弄明白的在前面申明 和 在后面申明 有时候会出现不同效果的情况。但是一直没有去仔细研究明白过

    在这里也许 会有一些朋友认为它可能会输出undefined。因为 因为第二排变量被重新赋值的关系。 

    但是结果是,这里会输出2;

    先不着急 我们再看一个例子。

    console.log(a);
    var a =2;

    这个例子 我相信有人会觉得 可能会输出2  也有可能 有人认为 在console.log之前 还没有申明 var a 所以会抛出 referenceerror的错误。。

    但是结果是 输出的却是 undefined;

    这里要究其原因,就要讨论一下 javascript 编译器 在这里面所进行的行为。

    当编译器看到 

    var a =2;

    这样的语句的时候 并不会像我们理解的一样,把他们一气呵成 就是 申明a 与赋值同时进行 //注意这句话非常重要

    而是把他拆分成了

    var a;
    a =2;

    来进行看待。第一个申明 var a 会在编译的时候就进行,而剩下的赋值语句会被留在原地等待执行阶段的时候再执行。

    所以照这个逻辑进行理解,也许你就明白为什么会出现上述的行为了。这里我分析当中的第二个例子。

    第二个例子会被当成
    var a;
    console.log(a);
    a =2;

    这样执行。所以输出的结果是 undefined 是因为已经申明了 却还没有值。

    ”这个过程就好像变量和函数声明从它们在代码中的位置被移动到了上面,这个过程就叫做 提升“----引用自《你所不知道的javascript上卷》。

    最后注意一个地方,无论是函数声明,还是变量声明都会被提升,而函数声明会被首先提升 这里需要注意哟。

  • 相关阅读:
    phpmyadmi 上传大文件
    wget 命令用法详解
    cuDnn的安装ubuntu16.04环境下(tensorflow正式安装之前的必备安装操作)
    ubuntu16.04 源码安装Python3.7 (可以在此基础上安装Tensorflow) (确保Tensorflow计算框架与系统的彻底隔离)
    大工软件学院 校园网登录脚本
    UML图 之 活动图 (汇总版)
    详解UML图之类图 (转)
    Java中private、protected、public和default的区别 (转)
    AI产业将更凸显个人英雄主义 周志华老师的观点是如此的有深度
    对什么样的人应该敬而远之
  • 原文地址:https://www.cnblogs.com/piperck/p/4964779.html
Copyright © 2011-2022 走看看