1.函数的定义
function 函数名称(argument1,argument2...){
代码段;
}
js中的函数名称如果重复会发生覆盖,函数通过return 加返回值,如果没有return默认返回undefined。
函数调用:函数名称(),如果有参数就传入参数,如果传递参数超过定义时参数,js会忽略掉多余参数。
变量的作用域:函数体内声明的变量,仅在函数体内可以使用,属于局部变量;函数体外声明的变量,从变量声明开始到脚本结束都可以使用,属于全局变量;但是不用var声明的变量,属于全局变量,函数体外能够访问,所以声明变量尽量用var关键字。
2.函数参数
(1)默认参数
js 中的参数不能有默认值,当然我们可以用其它形式实现,如
<script type="text/javascript">
function sum(a, b) {
a = a || 0;
b = b || 0;
return a + b;
}
alert(sum(10));
</script>
这里只是很简单的实现方式,也可以使用arguments对象实现;
<script type="text/javascript">
function sum(a, b) {
a = arguments[0] ? arguments[0]:0;
b = arguments[1]? arguments[1]:0;
return a + b;
}
alert(sum(10));
</script>
还可以通过arguments.length属性来检测参数个数。
(2)可变参数
我们还可以用arguments实现可变参数,如:
<script type="text/javascript">
function sum() {
var sum = 0;
var paramNum = arguments.length;
for(var i = 0; i < paramNum; i++) {
sum += arguments[i];
}
return sum;
}
alert(sum(10, 34, 454, 656));
</script>
3.全局函数
parseInt(string, radix):解析一个字符串,并返回一个整数。;
parseFloat(string):解析一个字符串,并返回一个浮点数。
isFinite(value):用于检查其参数是否是无穷大,如果是有限数,返回true。否则返回false。
isNaN:检查参数是否是NaN。
encodeURI(uriString):函数可把字符串作为 URI 进行编码,该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) ;该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
decodeURI(uriString): 对 encodeURI() 函数编码过的 URI 进行解码
encodeURIComponent(URIstring):把字符串作为 URI 组件进行编码,该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) ;其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
decodeURIComponent(URIstring):可对 encodeURIComponent() 函数编码的 URI 进行解码。
escape(string):函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串,该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
unescape(string):解码由escape()编码的字符串。
eval(string):可计算某个字符串,并执行其中的的 JavaScript 代码。
Number(object):把对象的值转换为数字。例如:如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。
String(object):把对象的值转换为字符串。
4.匿名函数
匿名函数,顾名思义就是没有名字的函数,如:
var sum = function(){
var sum = 0;
var paramNum = arguments.length;
for(var i = 0; i < paramNum; i++) {
sum += arguments[i];
}
return sum;
};
alert(sum(10, 34, 454, 656));
用匿名函数还可以实现回调函数,把函数作为一个参数传递即可。如:
function sum(a, b, logCallback){
logCallback(a + b);
}
sum(10, 45, function (result) {
console.log(result);
});
call,apply方法可用于函数调用,调用一个对象的一个方法,以另一个对象替换当前对象。
如:
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call(sub,3,1);
两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
function myFunction(a, b) {
return a * b;
}
myArray = [10,2];
myFunction.apply(myObject, myArray);
5.其它特殊函数
自调用:如下形式:
(function() {
alert("aaa");
})();
重写函数:如下形式:
function a() {
alert("aaa");
a = function () {
alert("bbb");
};
}
a();
a();
执行过a函数之后,再次执行,函数体就会发生变化。