JavaScript函数

函数定义

  • 函数声明

    function functionName(parameters) {        
      //执行的代码        
    }
    
  • 函数表达式

    //函数表达式可以存储在变量中,此时相当于匿名函数(不是一定需要写在一行中)
    var x = function (a, b) {return a * b};
    //在函数表达式存储在变量后,变量也可作为一个函数使用
    var z = x(4, 3);
    
  • Function() 构造函数

    //不建议使用
    var myFunction = new Function("a", "b", "return a * b"); 
    var x = myFunction(4, 3);
    
  • 函数提升
    即函数可以在声明之前被调用,但是使用表达式定义函数时无法提升。

  • 自调用函数
    函数表达式可以 “自调用”。
    如果表达式后面紧跟 () ,则会自动调用。
    通过添加括号,来说明它是一个函数表达式

    (function () { 
        var x = "Hello!!";      // 我将调用自己 
    })();
    
  • 函数可作为一个值使用

  • 函数是对象(无实际用途)

函数参数

  • JavaScript 函数对参数的值(arguments)没有进行任何的检查,它不会关注有多少个参数被传递,不关注传递的参数的数据类型。

  • 函数显式参数与隐藏参数(arguments)

    functionName(parameter1, parameter2, parameter3) {
        //code to be executed
    }
    

    函数显式参数在函数定义时列出。
    函数隐藏参数(arguments)在函数调用时传递给函数真正的值。

  • 参数规则

    JavaScript 函数定义时参数没有指定数据类型。
    JavaScript 函数对隐藏参数(arguments)没有进行检测。
    JavaScript 函数对隐藏参数(arguments)的个数没有进行检测。

  • 默认参数

    如果函数在调用时缺少参数,参数会默认设置为: undefined
    y || 0的含义,如果y已经定义 , y || 0返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false

  • Arguments 对象

    JavaScript 函数有个内置的对象 arguments 对象,arguments 对象包含了函数调用的参数数组。

    x = sumAll(1, 123, 500, 115, 44, 88);
    function sumAll() {
        var i, sum = 0;
        for (i = 0; i < arguments.length; i++) {
            sum += arguments[i];
        }
        return sum;
    }
    
  • 通过值传递参数

    如果函数修改参数的值,将不会修改参数的初始值(在函数外定义)
    JavaScript函数传值只是将参数的值传入函数,函数会另外配置内存保存参数值,所以并不会改变原参数的值。

  • 通过对象传递参数

    在函数内部修改对象的属性会修改其初始的值

函数调用

  • JavaScript 函数有 4 种调用方式。每种方式的不同在于 this 的初始化。

涉及点略深,暂时忽略

闭包

闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
add();
add();
add();// 计数器为 3

代码解析:变量 add 指定了函数自我调用的返回字值。
自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。
add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。
这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。
计数器受匿名函数的作用域保护,只能通过 add 方法修改

常用函数

  • setInterval(), 间隔指定的毫秒数不停地执行指定的代码
    语法window.setInterval("javascript function",milliseconds);,window前缀可省略

    //每隔3秒钟跳出一个弹出框
    setInterval(function(){alert("Hello")},3000);
    //也可以这么写
    setInterval('alert("Hello")',2000);
    setInterval('alert("Hello");',2000);
    
  • clearInterval(), 用于停止 setInterval() 方法执行的函数代码
    语法:window.clearInterval(intervalVariable),window前缀可省略

    var myVar = setInterval(function(){alert("Hello")},3000);
    clearInterval(myVar);
    
  • setTimeout(), 暂停指定的毫秒数后执行指定的代码
    语法:window.setTimeout("javascript 函数",毫秒数);,window前缀可省略

    setTimeout(function(){alert("Hello")},3000);
    
  • clearTimeout(), 用于停止执行setTimeout()方法的函数代码
    语法:window.clearTimeout(timeoutVariable),window前缀可省略

    var myVar=setTimeout(function(){alert("Hello")},3000);
    clearTimeout(myVar);
    
  • 警告框
    语法:window.alert("sometext");,window前缀可省略

  • 确认框
    语法:window.confirm("sometext");,点击确认返回true,取消返回false,window前缀可省略

  • 提示框
    语法:window.prompt("sometext","defaultvalue");,window前缀可省略

  • 检查,设置,获取cookie

    function setCookie(cname,cvalue,exdays){
        var d = new Date();
        d.setTime(d.getTime()+(exdays*24*60*60*1000));
        var expires = "expires="+d.toUTCString();
        document.cookie = cname+"="+cvalue+"; "+expires;
    }
    function getCookie(cname){
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i=0; i<ca.length; i++) {
            var c = ca[i].trim();
            if (c.indexOf(name)==0) return c.substring(name.length,c.length);
        }
        return "";
    }
    function checkCookie(){
        var user=getCookie("username");
        if (user!=""){
            alert("Welcome again " + user);
        }
        else {
            user = prompt("Please enter your name:","");
            if (user!="" && user!=null){
                setCookie("username",user,30);
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值