JS代码预解析原理

js学习

以后坚持一日一更,和大家分享我每天学习的成果及经验,让想要学习的小伙伴少走弯路。

昨天放假,导致肾上腺激素分泌过多,兴奋过头忘记写博客了,不好意思,o( ̄▽ ̄)d ,既然放假了那我们就复习一下之前学的并拓展一下,爱学习的小伙伴如果有什么不懂得可以问我,虽然我也不会,但是两个人会比一个解决问题来的更快哦

JS代码预解析原理 :

如果一个文档流中包含多个script代码段(用script标签分隔的js代码或引入的js文件),它们的运行顺序是:
步骤1. 读入第一个代码段(js执行引擎并非一行一行地执行程序,而是一段一段地分析执行的)
步骤2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到步骤5
步骤3. 对var变量和function定义做“预解析”(永远不会报错的,因为只解析正确的声明)
步骤4. 执行代码段,有错则报错(比如变量未定义)
步骤5. 如果还有下一个代码段,则读入下一个代码段,重复步骤2
步骤6. 结束

一、基本的几条语句

		var i ;
		console.log(i);//undefined
		i = 30;
		
		console.log(num);  // undefined,输出在前定义赋值在后是不行的
		var num = 0;
		//console.log(str);  // 报错:str未定义
		str = "string";
		
		console.log(func);  // undefined
		var func = function (){ console.log('exec func'); }
		
		test();  // exec test
		console.log(test());  //undefined
		function test(){ console.log('exec test'); }
		//运行会输出两个exec test

请把变量的声明和赋值放在调用之前,否则undefined

二、函数名与变量名相同

	var mark = 1;
			function mark(x) {
				return x * 2;
			}
			console.log(mark); 
			//如果把var mark = 1;注释掉会输出整个函数
			// 不去掉前边的var mark = 1;则会弹出1

函数与变量同名,如果是在函数内部定义的变量,你会被提示“Identifier ‘mark1’ has already been declared”如果在外部定义,那么将会替代整个函数,所以说命名需谨慎,切忌重名

三、把第二段包括在if语句块中

// 当有条件时候(代码包含在条件语句块里)
			if (true) {//true 则不执行大括号中的代码,true则会执行大括号中的代码
			   // var mark1 = 1;//Identifier 'mark1' has already been declared	标识符“mark1”已经声明
			    function mark1(){
			       console.log("exec mark1");//为true时会输出exec mark1
			    }
			   // var mark1;//Identifier 'mark1' has already been declared
			    console.log(mark1);//为true时直接输出整个函数
			}
			console.log(mark1);//为false时输出  undefined ;为true时直接输出整个函数
			mark1();//if为true时,就会输出exec mark1,为false是 not a function

if判断的一些小问题,注意点对/错就好了

一定要熟悉js的执行流程,这会有助于我们更好的去写和调试代码

你可能感兴趣的:(#,js)