美文网首页
函数声明及调用

函数声明及调用

作者: zy懒人漫游 | 来源:发表于2018-01-27 05:28 被阅读0次

    函数调用

    首先用function 声明一个函数

    function sayHello(){   //sayHello  是一个函数名
      console.log('zhouyi')  //里面的是函数体
    }
    sayHello()  //  zhouyi  调用函数名,打印出结果,如果不调用不会打印结果
    

    声明不必放调用前面

    sayHello() 
    
    function sayHello(){ 
      console.log('zhouyi')
    }
    

    这样也是可以的,但是中间不能有其他的函数。

    函数调用

    var sayHello = function(){
      console.log('zhouyi')
    }
    sayHello() 
    

    在函数调用里面,声明必须放调用的前面。因为相当于把函数当成一个值,只不过值的内容是一个函数,然后调用的时候,你要有值才能去调用,所以,声明必须放调用的前面。

    声明前置,

    在一个作用域下,var 声明的变量和function声明的函数会前置

    不加var作用

    不加var 会声明一个全局变量,如果真的需要一个全局变量,也应该在最外层 作用域使用var声明。

    function fn(){
      a = 1 ;
    }
    fn();
    console.log(a);  //1
    

    立即执行函数表达式:声明一个匿名函数,然后立即执行。这是它的2种写法

    • (function(){ /* code */ })();

    • !function(){ /* code */}();

    (function(){
      var a = 1;
    })()
    console.log(a);//undefined 
    
    因为a是独立作用域下的a,只是做了个声明,和console.log(a)没有半毛钱关系。
    

    作用,隔离作用域,避免全局变量

    function fn(){
      var a ;
      a =1;
      console.log(a);
    }
    fn()
    
    等同于
    
    (function(){
      var a ;
      a =1;
      console.log(a);
    })()
    

    另一种写法,

    !function(){
      var a ;
      a =1;
     console.log(a);
    }()
    创建独立作用域,隔离外部变量,不受干扰。
    

    注:“!”可以是任何单个符合,例如!@#¥%,不能用()、'、"这样的符号

    还有种情况

    function fn(i,j){}
    类似于,但不是完全等价于
    function fn(){
      var fn = arguments[0];
      var fn = arguments[1];
    }
    

    举个例子

    var a = 100;
     !function(a){
        a =1;
     }(/*没有传参*/)
    console.log(a); //100
    

    因为a没有传参数,而且a没有打印, console.log(a)打印的是全局变量a,结果输出为100。

    假如a传参了,如下所示

    var a = 100;
     !function(a){
        console.log(a)// 打印的的第一个数99
     }(99)
    console.log(a); //打印的的第二个数100
    
    • 首先第一个console.log(a)会打印99,因为是立即执行函数,会立即执行,它和外面的a没有半毛钱关系,是独立作用域下的a,然后传参99,所以输出结果为99。
    • 其次第二个console.log(a)会打印出100,是全局作用域下a的值。

    同样的,再举个例子

    var a = 100;
     !function(a){
        console.log(a)// 100
     }(a)
    

    为什么是这样呢,因为console.log(a)打印出来的是函数中的a,只是后面传的参数是全局变量中的a,由于全局变量中声明了a并赋值100,所以打印出来的值也是100。立即执行函数里的a和全局变量中的a,没有半毛钱关系,只是刚好传参进去了而已。

    相关文章

      网友评论

          本文标题:函数声明及调用

          本文链接:https://www.haomeiwen.com/subject/ntngaxtx.html