[摘要]本篇文章给大家带来的内容是关于JavaScript预解释是什么?JavaScript预解释的解析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。JavaScript是一门解...
本篇文章给大家带来的内容是关于JavaScript预解释是什么?JavaScript预解释的解析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
JavaScript是一门解释型的语言 , 想要运行JavaScript代码需要两个阶段
本文就重点介绍预解释,框架图如下:
一、什么是预解释
预解释: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