为什么说JavaScript预解释是一种毫无节操的机制详析-创新互联
前言
创新互联主要从事成都网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务张北,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108JavaScript是一门解释型的语言 , 想要运行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 a;var b;var c;test=AAAFFF111; var a=10,b=11,c=12; function test(a){ //=>私有作用域:a=10 var b; a=1;//=>私有变量a=1 var b=2;//=>私有变量b=2 c=3;//=>全局变量c=3 } test(10); console.log(a);//10 console.log(b);//11 console.log(c);//3
文章题目:为什么说JavaScript预解释是一种毫无节操的机制详析-创新互联
地址分享:http://hbruida.cn/article/pdjce.html