js(二)函数及变量的提升

220 阅读1分钟

函数的提升

定义函数的两种方法:

  1. 第一种直接定义 function fun()
  • 可以用在后面定义函数,在定义函数的前面可以正常进行函数的调用,不会产生变量提升导致的not a function问题
  1. 第二种利用var关键字定义 var fn1 = function()
  • 只能在函数定义之后调用,如在函数定义前使用会产生函数提升报错!!!
 fun();
        function fun(){
            console.log("yes")
        }

利用function直接定义和的函数,在函数定义前被调用,不会产生函数提升的问题,效果如下:

  <script>
        fn() ;
        var fn = function(){
            console.log("yes")
        }
    </script>

利用var关键字定义的函数不可以在函数定义前被调用,容易产生函数的提升,结果如下:

变量的提升

变量的两种情况

  • 全局变量:定义在函数体外部,作用在全局
  • 局部变量:定义在函数体内部,仅作用在函数体内部

为什么会产生变量提升:

  • 在函数内部利用var 关键字定义一个与全局变量同名的一个变量
  • 并且在定义前对这个变量进行输出,会导致变量的提升,相当于在函数体内var x;对它进行声明
  var a = 5;
    function fun(){
        console.log(a); //undefined
        var a = 10;
        console.log(a); // 10
    }
    fun();
    console.log(a); // 5

在函数体内部对全局变量进行修改:


    var b = 3;
    function fn(){
        console.log(b);// 3
        b = 8;
        console.log(b);// 8
    }
    fn();
    console.log(b);// 8