• Javascript笔记--函数


              上一篇写了有关JavaScript中对象的应用,本篇博客记录有关方法的使用.

              一. 函数的调用.

                1.普通调用: 少传参数那么就会将缺少的参数默认为undefined.

        var add = function(a,b){
            return a+b;
        }
    
        console.log(add(1,2)); //3
        console.log(add(1,"2")); //12
        console.log(add(1)); //Nan
        console.log(add(null,1)) //1
        console.log(add("12")) //12undefined

                2.方法调用模式: 将函数作为一个对象的属性,就叫做方法.

    var myObj ={
            value :0,
            setValue:function(number1){
                this.value = typeof(number1)=='number'?number1:1;
            }
        };
    
        myObj.setValue(3)
        console.log(myObj.value); //3
        myObj.setValue("3")
        console.log(myObj.value); //1

                3.构造器调用模式: 在C#中我们声明一个对象一般都是通过new关键字来实现,其实JavaScript也可以.

    var Quo = function(){
            this.val1;
        }
    
        var myQuo = new Quo();
        console.log(myQuo.val1);
        myQuo.val1=1; //1
        console.log(myQuo.val1);
        var myQuo1 = new Quo();
        console.log(myQuo1.val1); // undefined

                4.默认参数,每一个函数里面默认会有一个arguments参数用来存储,所有的参数的. arguments是一个对象,存储了数据,不具备其他方法.

        var sum = function(){
            var sum=0;
            for(var i=0; i<arguments.length;i+=1){  //默认会有一个arguments包含所有参数
                 sum+= arguments[i];
            }
    
            return sum;
        }
    
        console.log(sum(1,2,3)); // 6

              二. 异常处理

                1.异常处理返回的对象信息由自己随意构建.返回任意对象均可. throw抛出了一个包含name和message属性的对象.

    var add = function(a,b){
            if(typeof(a)!='number' || typeof(b)!='number'){
                throw{
                    name:'type Error',
                    message:'All the parma must be number type'
                }
            }
        }
        
        var add_test = function(){
            try{
                add("frank",1);
            }catch(ex){
                console.log(ex.message); // All the parma must be number type
            }
        }

              三.扩展方法.

                 1.和C#一样,JavaScript也提供了扩展方法,对于一些会经常用到的一些方法,可以通过提供扩展方法,方便对数据处理.

        Array.prototype.GetOddNumber = function(){
    
             var result = [];
             for(var index=0;index<this.length;index++){
                 if(this[index]%2!=0){
                    result.push(this[index]);
                 }
             }
    
             return result;
        }  
        var array = [1,2,3,4,5,6];
        array = array.GetOddNumber();
        console.log(array); // [1, 3, 5, GetOddNumber: function]

              四.闭包

                 对于闭包我也不清楚该怎么定义表示直接上代码吧.

                 1.作用域. 变量分为全局变量和局部变量两种, 外面无法访问局部变量.

    var global_val1 = 3;
        var add = function(){
            private_val2=4;
            var private_val3 =5;
        }

                2.闭包的应用: 全局变量的坏处在于很多地方都可以修改。下面有这样一个场景, 我要记录一个button的点击次数,比方id分别为btn1

                 A.全局变量的实现方法.

        var count1 = 0;
       $(document).ready(function(){
        $("#btn1").click(function(){
            count1 +=1;
            alert(count1);
        });
       });

                 B.使用闭包方法解决:

       $(document).ready(function(){
        $("#btn1").click(function(){
            alert(showCount());
        });
       });
    
       var showCount = (function () {
        var counter = 0;
        return function () {return counter += 1;}
       })();

                C.对比: 两种方法均可以实现点击次数,但是问题来了. 对于第一种方法,Count是全局变量很容易被其他js修改到. 而且count本来就只用于记录button次数,所以是没必要定义为全局变量的.

  • 相关阅读:
    Find the capitals
    Area of a Circle
    SequenceSum
    使用Eclipse设定Android开发环境
    hdu 1290 竭诚为杭州电礼物50周年
    oracle connect by 说明
    CSS截取字符串,额外的文本显示以省略号
    动态规划——背包问题
    【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
    博客搬到了http://xianglong.me
  • 原文地址:https://www.cnblogs.com/FourLeafCloverZc/p/4360900.html
Copyright © 2020-2023  润新知