JS预解析(预解释)

2022-08-07,,

一.定义

js是一个解释型的语言,在代码执行之前,先对代码进行通读和解释,然后再执行代码,也就是说会经历解释代码和执行代码两个阶段。在解释代码的过程中,解释了两个内容:
	声明式函数(不会解析赋值式函数)
		告诉浏览器,这个名字已经被定义过了,并且是一个函数。
	var 关键字
		告诉浏览器,这个变量名已经被定义过了,但是还没有赋值。

二.注意点

当进行预解析的时候,如果变量名和函数名重名,以函数名为准。

三.预解析的无节操

  • 不管if条件是不是成立,if里面的代码都会进行预解析。
  • 预解析函数的时候,如果函数里面有return,return后面的代码虽然不会执行,但是会进行预解析。

四.举例

1.
		fn();
        console.log(num);

        function fn(){
            console.log('我是fn函数')
        }
        var num = 100;

	相当于执行:
	
		function fn(){
            console.log('我是fn函数')
        }
        var num = 100;
        fn();
        console.log(num);//undefined
        num = 100;
2.
		console.log( func );//函数func
        var func = 123;
        console.log( func );//123
        function func() {
            console.log( 'Hello js' );
        }
		
	相当于执行:
	
		var func;
        function func() {
             console.log('Hello');
         }
        console.log( func );
        func = 123;
        console.log( func );	
3.
		console.log( func );
        function func() {
            console.log( 'Hello js' );
        }
        console.log( func );
        var func = 123;
        console.log( func );

	相当于执行:
		
		function func() {
                console.log( 'Hello js' );
            }
        var func
        console.log( func );
        console.log( func );
        func = 123;
        console.log( func );
4.
        alert(a); 
        var a = 0;
        alert(a);

	相当于执行
		
		var a
        alert(a);
        a = 0;
        alert(a)
5.
		 myFun(10, 20);//myFun is not a function
        var myFun = function(a, b) {
            return a + b;
        }

	相当于执行

       var myFun;
       myFun(10, 20);//报错
6.
		alert(a);
		var a = 1; 
		alert(a); 
		function a() {
			alert(2);
		} 
		alert(a); 
		var a = 3; 
		alert(a); 
		function a() {
			alert(4); 
		}
		alert(a); 

	相当于执行
	
		var a;
		function a() {
			alert(2);
		} 
		var a
		function a() {
			alert(4); 
		}
		alert(a);//那个alert(4)的函数
		a = 1; 
		alert(a); //1
		alert(a);//1
		a = 3; 
		alert(a);//3
		alert(a);//3

本文地址:https://blog.csdn.net/weixin_46367787/article/details/107253673

《JS预解析(预解释).doc》

下载本文的Word格式文档,以方便收藏与打印。