函数定义
函数声明
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 为 falseArguments 对象
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); } } }