• 热门专题

关于JavaScript预解释的详细大解密

作者:whl  发布日期:2018-11-20 08:33:00
Tag标签:JavaScript  预解释  
  •   很多人都说JavaScript预解释十分的不靠谱,操作的时候让人想揍他一顿,完全没有节操可言。小编为此特意找了详细的示例代码来给大家进行操作示范,让大家能够更深入的了解一下。感兴趣的朋友赶紧跟随小编一起往下看吧!

      前言

      JavaScript是一门解释型的语言 , 想要运行JavaScript代码需要两个阶段

      编译阶段: 编译阶段就是我们常说的JavaScript预解释(预处理)阶段,在这个阶段JavaScript解释器将完成把JavaScript脚本代码转换到字节码

      执行阶段: 在编译阶段JavaScript解释器借助执行环境把字节码生成机械码,并从上到下按顺序执行

      本文就重点介绍预解释,框架图如下:

    框架图

      一、什么是预解释

      在js中,带var 和function关键字的需要预解释:

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

      预解释:JavaScript代码执行之前,浏览器首先会默认的把所有带var和function的进行提前的声明或者定义

      1.理解声明和定义

      声明(declare):如var num;=>告诉浏览器在全局作用域中有一个num的变量了;如果一个变量只是声明了但是没有赋值,默认的值是undefined

      定义(defined):如num=12;=>给我们的变量进行赋值。

      2.对于带var和function关键字的在预解释的时候操作不一样的

      var =>在预解释的时候只是提前的声明

      function =>在预解释的时候提前的声明+定义都完成了

      3.预解释只发生在当前的作用域下。

      例如:开始只对window下的进行预解释,只有函数执行的时候才会对函数中的进行预解释

      二、作用域链

      1.如何区分私有变量和全局变量?

      1)在全局作用域下声明(预解释的时候)的变量是全局变量

      2)只有函数执行会产生私有的作用域,比如for(){}、if(){}和switch(){}都不会产生私有作用域

      3)在"私有作用域中声明的变量(var 声明)"和"函数的形参"都是私有的变量。在私有作用域中,代码执行的时保遇到了一个变量,首先我们需要确定它是否为私有的变量,如果是私有的变量,那么和外面的没有在何的关系;如果不是私有的,则往当前作用域的上级作用域进行查找,如果上级作用域也没有则继续查找,一直找到window为止,这就是作用域链。

      我们举个例子来区别私有变量和全局变量:

    区别私有变量和全局变量

      判断是否是私有变量一个标准就是是否是在函数中var声明的变量和函数的形参都是私有的变量。本道题目在test函数中a是形参和var b定义的变量b都是私有变量。

      2.函数传参

      这是因为当函数执行的时候,首先会形成一个新的私有的作用域,然后按照如下的步骤执行:

      1)如果有形参,先给形参赋值

      2)进行私有作用域中的预解释

      3)私有作用域中的代码从上到下执行

      我们来看一道例题

    例题

      3.JS中内存的分类

      栈内存:用来提供一个供JS代码执行的环境,即作用域(全局作用域/私有的作用域)

      堆内存:用来存储引用数据类型的值。对象存储的是属性名和属性值,函数存储的是代码字符串。

      三、全局作用域下带var和不带var的区别

      我们先来看以下两个例子:

    带var和不带var

      当你看到var num=12时,可能会认为只是个声明。但JavaScript实际上会将其看成两条声明语句:var num;和 num=12;第一个定义声明是在预解释阶段进行的。第二个赋值声明会被留在原地等待执行阶段。num2=12 相当于给window增加了一个叫做num2的属性名,属性值是12;而var num=12 首先它相当于给全局作用域增加了一个全局变量num,它也相当于给window增加了一个属性名num2,属性值是12。两者最大区别:带var的可以进行预解释,所以在赋值的前面执行不会报错;不带var的是不能进行预解释的,在前面执行会报错;

      好了今天给大家介绍的关于JavaScript预解释的详细内容就到这里为止了,通过这次更深入的学习大家对于预解释是不是又重新认识了一遍?如果大家对上述所说的内容还有什么不明白的话欢迎给小编留言,大家一起交流解决问题。

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规