JavaScript基础(三)函数介绍

基本介绍

  • 类似于Java中的方法,目的是为了减少代码量和方便重复调用。
  • funName(); 是调用的函数方法
  • new FunName();是调用的构造方法。
  • 对于函数有两种写法
    •   声明:function nameF()
    •   表达式: var nameF = function

JS函数的参数

  JavaScript是弱类型语言,一定要对参数进行判断。

<script type="text/javascript">
  //对于参数来说进行判断,一般是空(undefined,null,0,空字符串,NaN)
  //因为js中任何类型都可以转换成boolean类型,所以利用这个特性
  //通过    if(!param) 语句可以过滤掉大部分参数,
  //更简单的是 对于数字 var num = num || 0;
  //对于字符串 var str = str || '';
  //对于数组 var arr = arr || [];
  //对于函数等,只好用typeof来判断,例如:
  //if(typeof('afterClose')='function')
  function f1(a,b){
      return a+b;
  }
  console.log(f1(1,2));//输出3
  console.log(f1(1));//输出NaN,因为调用时形参b的值为undefined,无法进行计算

</script>

JS函数没有重载

<script type="text/javascript">
    function sum(a,b){
        return a+b;
    }   
    function sum(a,b,c){
        return a+b+c;
    }

    console.log(sum(1,2));//输出NaN
    //js类似css,会覆盖,调用最后解析的函数,所以js里面不允许有重名的函数

    //另外JS中的调用函数时参数可以随意写,不做限制,输出结果只跟函数体有关
    console.log(sum(1,2,3,4));//6

</script>

变量/参数

<script type="text/javascript">
  // 形参不影响实参的值
   // 不使用var声明的变量是全局变量,但是不推荐使用
  // 全局作用域只有一个,在script标签下就是全局,
  // 一个函数就是局部定义
    var a = 20;
    var b = 30;
    function sum(a,b){
        var a = 10;
        return a+b;
    }
    console.log(sum(a,b));//40
    console.log(a);//20

</script>

浏览器解析js顺序

  1. 先进行预解析(找var function,param)
  2. 再进行从上到下,一行一行解析、

例1:

  //例如:
    var num = 20;
    fun();
    function fun(){
        console.log(num);//undefined
        var num = 10;
    }
    //其实编译后,是这样的
    /**
    //全局
    //第一次预解析
    var num;
    function fun(){
        console.log(num);
        var num = 10;
    }
    num=10;
    fun();

    //第二次预解析
    var num;
    function fun(){
        //局部
        var num;
        console.log(num);//输出undefined
        num = 20;
    }
    num=10;
    fun();
    */

例2:

    demo();
    console.log(c);
    console.log(b);
    console.log(a);

    function demo(){
        var a = b = c = 10;
        console.log(a);
        console.log(b);
        console.log(c);
    }

结果如下,仔细看一下:

    //编译后变化
    functoin demo(){
        var a;
        a = b = c =10;//不使用var声明的是全局变量,a是局部变量,b和c是全局变量
        console.log(a);//10
        console.log(b);//10
        console.log(c);//10
    }
    demo();
    console.log(c);//10
    console.log(b);//10
    console.log(a);//a is not defined

 

posted @ 2019-07-15 08:25  readLive  阅读(283)  评论(0编辑  收藏  举报