重新开始JavaScript(三)--对于函数

含义介绍

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

JavaScript函数的参数

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

<script>
function f1(a,b){
    return a+b;
}
console.log(f1(1,2));//输出3
console.log(f1(1));//输出NaN,因为调用时形参b的值为undefined,无法进行计算

//对于参数来说进行判断,一般是空(undefined,null,0,空字符串,NaN)
//因为js中任何类型都可以转换成boolean类型,所以利用这个特性
//通过    if(!param) 语句可以过滤掉大部分参数,
//更简单的是 对于数字 var num = num || 0;
//对于字符串 var str = str || '';
//对于数组 var arr = arr || [];
//对于函数等,只好用typeof来判断,例如:
//if(typeof('afterClose')='function')
</script>

JavaScript函数没有重载

<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 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>
-- 不使用var声明的变量是全局变量,但是不推荐使用
-- 全局作用域只有一个,在script标签下就是全局,
-- 一个函数就是局部定义

对于浏览器解析js顺序

  1. 先进行预解析(找var function,param)
  2. 再进行从上到下,一行一行解析
<script>
//例如:
    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();
    */
</script>
-- 看猜下面的结果
<script>
    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);
    }
</script>
--编译运行过程如下:
<script>
//编译后变化
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
</script>

猜你喜欢

转载自blog.csdn.net/yaun_1994/article/details/80233809