• 预解释阶段发生在创建了堆内存,让代码执行之前,对当前作用域中带var和function的进行预解释

    • 在浏览器解析执行代码的时候,会提前把带var和function的代码声明或定义,提前放在作用域的最前面执行,也就是浏览器把对这些变量的声明提升到作用域的最前面
    • 函数数据类型会在预解释阶段同时声明和定义
      • 浏览器会将函数的定义以字符串的形式存在一个新的命名空间(堆内存)
    • 在函数执行中,函数的形参也会进行预解释,相当于var 形参
    • 在判断体中
      • 无论判断是否成立,里面的代码都进行预解释,但是不进行定义(包括function)
      • 在新版本浏览器中,只要条件成立,他就会把函数执行(类似于在条件体内进行预解释)
    • 在函数表达式中,等号右边的function不进行预解释
    • 自执行函数不进行预解释,但是在他执行的时候开辟的栈内存进行预解释
    • 在函数执行的时候,return后边紧紧跟着的不进行预解释,但是在return下面的依然进行预解释,但是不执行不赋值
    • 变量名不能重复,变量当前的作用域中,同名的变量声明,会覆盖之前的声明
    • 不带var的变量,不进行预解释,相当于给window动态添加了一个属性
      • 当代码执行到这的时候,才进行创建变量并赋值这个过程,所以在创建之前的调用,会报错,变量 is not defined.
    • 在预解释的时候,同一个名称的变量,如果都是通过var声明的,之前声明过,后边的声明就不重新在声明,如果是function,后边会重新声明和定义,但是后边的定义会覆盖前边的
  • var num = 2;

    • 第一步:声明这个变量(预解释这一步)
    • 第二步:给num这个变量赋值2
  • 函数执行过程

    • 首先进行预解释,形参和函数私有作用域中带var和function进行提升
    • 如果形参在预解释时被function重叠了,那么形参消失,不能使用那个形参接受传入函数的实参
    • 代码开始从上到下执行,给形参赋值,代码接着往下执行
    • return下面的代码不执行了,返回值,返回产出

JS预解释的总结的更多相关文章

  1. JS 预解释相关理解

    1.JS中的内存空间分为两种:栈内存.堆内存 栈内存:提供JS代码执行的环境;存储基本数据类型的值; ->全局作用域或者私有的作用域其实都是栈内存 堆内存:存储引用数据类型的值(对象是把属性名和 ...

  2. JS预解释

    1.声明(declare)  var num   // 告诉浏览器在全局作用域中有一个num变量 定义(defined) num = 12 // 给我们的比变量进行赋值 2.var:在预解释时只是提前 ...

  3. JS学习:第一周——NO.1预解释

    1.何为预解释? 在当前作用域下,在JS代码执行之前,浏览器会对带var和带function的进行提前声明或定义: ①带var的:只声明不定义:告诉浏览器,有这么一个变量,但是并没有赋值 ②带func ...

  4. [js]js栈内存的全局/私有作用域,代码预解释

    js代码如何执行的 浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存) --> 执行js需要预解释 - 带var : 提前声明 - 带function关键字的: 提前声明+定义 js ...

  5. [js]js中4种无节操的预解释情况

    js中4种无节操的预解释情况 - 1. if语句即使条件不成立,条件里的表达式也会进行预解释. - 2. 匿名函数的预解释: 只对等号左边与解释 - 3. 自执行函数的预解释: 不进行预就解释, 执行 ...

  6. [js]js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了

    js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了 fn(); // 声明+定义 js中声明过一次的变量,之后在不会重新声明了 function fn() { console.log( ...

  7. js中的预解释

    在js中,带var 和function关键字的需要预解释: 那什么是预解释?就是在js代码执行之前,先申明好带有var 关键字和带有function关键字的变量,在内存里先安排好.但是带有var关键字 ...

  8. JS之预解释原理

    预解释的原理 预解释的不同机制 var的预解释机制 function 的预解释机制 预解释机制 面试题练习 预解释的的不同机制 预解释也叫预声明,是提前解释声明的意思:预解释是针对变量和函数来说的:但 ...

  9. 我理解的js中预解释

    浏览器在执行代码前,先找带var和带function的地方,把带var的声明且赋予初始值undefined,把带function的声明且定义. 带var关键字预解释 让我们先看下这段代码执行的结果: ...

随机推荐

  1. TCP的可靠性 窗口滑动 拥塞控制

    看这篇文章: http://www.cnblogs.com/woaiyy/p/3554182.html 窗口滑动,如下图: 流量控制 流量控制方面主要有两个要点需要掌握.一是TCP利用滑动窗口实现流量 ...

  2. cocos2dx 3.0正式版 在mac上新建项目

    触碰科技确定2.x版本号不会再更新了,会一直维护3.x的版本号.于是赶紧看看3.0的,简单浏览一下.类的使用方法和原来的几乎相同,仅仅是 表达的写法变了下,. . . . 以后肯定有非常多变化,速度熟 ...

  3. UVA 12493 Stars (欧拉函数--求1~n与n互质的个数)

    pid=26358">https://uva.onlinejudge.org/index.phpoption=com_onlinejudge&Itemid=8&cate ...

  4. opencv-图像金字塔

    图像金字塔 目标 原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/pyramids/pyramids. ...

  5. 整理一些PHP开发安全问题

    整理一些PHP开发安全问题 php给了开发人员极大的灵活性,可是这也为安全问题带来了潜在的隐患.最近须要总结一下以往的问题,在这里借翻译一篇文章同一时候加上自己开发的一些感触总结一下. 简单介绍 当开 ...

  6. android中9-patch图片的使用

    看了非常多文章的介绍,9.png图片有两种区域:可扩展区和内容显示区. 弄了半天才明确什么叫做可扩展区,什么叫做内容显示区. 分享一下自己的理解. 下图是某博客的截图: 图片来自:http://blo ...

  7. layout-代码中添加view

    今天需要在代码中动态的给一个布局添加一个imageview,现在把方法记录如下.直接看demo代码 //创建容器 final LinearLayout layout = new LinearLayou ...

  8. 分享一段css代码学到的js知识

    [].forEach.call($$('*'),function(val){ val.style.outline = '1px solid #'+(~~(Math.random()*(1<< ...

  9. cksum---检验文件CRC是否正确

  10. chfn---改变finger命令显示的信息

    chfn命令   chfn命令用来改变finger命令显示的信息.这些信息都存放在/etc目录里的passwd文件里.若不指定任何选项,则chfn命令会进入问答式界面. 语法 chfn(选项)(参数) ...