js脚本执行顺序分析

责编:menVScode 2017-08-20 15:25 阅读(1017)

        浏览器加载脚本代码的时候,有一个执行顺序:先定义,后执行,先定义后执行是当前的内存机制所主导的。

        先定义:是通过var 声明的变量  通过function声明的函数。

        后执行:除了定义代码,其余的都是执行代码;并且定义代码会从上往下来执行。

        

        js脚本加载顺序例子1:

console.log(a);	//2:访问变量a,但此时a中没有存储任何的内存地址。所以输出的结果是undefined。
var a = 1;	//1:定义变量a; 3:将1的内存地址赋值给变量a。
console.log(a);	//4:输出结果为1; 因为当前变量a已经拿到了1在常量池的内存地址。

       

        js脚本加载顺序例子2:

         在函数内部的执行顺序也是先定义后执行。

function fn(){
	console.log(a);	//2:变量a中没有存储内存地址,输出undefined
	var a = {};	//1:定义变量a	3:将{}的内存地址赋值给变量a。
}
fn(); //结果为:undefined

        

         js脚本加载顺序例子3:

fn();			//3:调用fn函数
var a = {}		//1:定义变量a	//7:将{}的内存地址赋值给a
console.log(a);		//8:输出object
function fn(){		//2:定义函数fn
	console.log(a);	//4:输出undefined
	var a = 1;	//5:定义变量a	//6:将1的内存地址赋值给a
}
console.log(a);		//9:输出object


         js脚本加载顺序例子4:

fn();			//3:调用函数fn
var a={};		//1:定义变量a	//8:把{}赋值给变量a
console.log(b);		//9:输出b为2
function fn(){		//2:定义函数fn
	console.log(a);	//5:输出undefined,遵循就近原则,本身作用域有变量a,就不会去全局去找了
	var a=b=2;	//4:定义变量a	6:把2的值赋值给全局变量b,再把全局变量b赋值给局部变量a; 
			//分析第6步:a= b=2,2赋值给b,b没有用var进行声明,那么就会去全局作用域去找,也就是在全局隐式声明var b,然后把2复制给全局的b;
	console.log(a);	//7:输出a为2
}
console.log(a);		//10:输出a为{}
标签: js
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码