js的预处理

  JavaScript不会完全按照代码的顺序执行,在执行之前会对定义的函数和变量先来一边所谓的预编译处理。

先来说下对变量的预处理:

    console.log(a) //undefined
    var a ='hello world!'
    console.log(a) //'hello world'

  按照常理,我们还没定义a这个变量,提前打印应该是报错的,但是确打印出undefined, 出现这个效果的原因就是预处理机制。再来说下这段代码的执行过过程:

    var a;
    console.log(a);  //undefined
    a = 'hello world';
    console.log(a);  //hello world

  通过这段代码可以看出,在代码执行之前会找到变量,然后把该变量提升到顶部!var a;由于a未 赋值,所以打印出undefined,继续执行对a进行赋值所以再次打印的是'hello world'。

除此之外,对函数也会进行预处理操作:

    console.log(fun1); // function f1() {}
    function fun1() {}

  这段代码的执行过程是这样的:

    function fun1() {}
    console.log(fun1);

  与变量提升相似,函数预编译的时候函数会被提升到最前面

  当变量与函数同时存在时,函数提升的更靠前!!!

猜你喜欢

转载自www.cnblogs.com/genhao7/p/12240895.html