1.函数的概念
官方概念:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
定义一个函数时,要使用关键词function;没有关键词function就不是函数,小括号前面是函数名称,代码块写在大括号内,函数名的命名规则和变量名的命名规则一样,“见名思意”,“驼峰命名法”。
关键词和函数名称之间用空格隔开,当没有函数名称时,这种函数称之为匿名函数,例如:
var Btn=document.getElementById('button');
Btn.οnclick=function(){ //无函数名称,为匿名函数
alert("Hello World");
}
注:函数写完之后,要调用才能有效触发函数内的代码。
实例:
function add(){
var a=5,b=6;
var c=a+b;
alert(c);
}
add(); //调用函数add();
调用带参数的函数:当在调用函数时,可以向函数内传递若干值,这些值为形式参数,简称形参。参数可以有若干,用“(,)”隔开。大括号内的为函数体,括号外的为函数头,函数头部体现的是函数的设计,函数体体现的是函数的设计过程,故函数头部比函数体重要。
函数的作用:利用函数可以解决一些比较复杂的问题,这跟数学中的利用函数思想去解决一些难题的性质是一样的,说简单点就是在JS中,利用函数可以将“大事化小”。实例:验证哥德巴赫猜想的成立:
/*
* 验证哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和
* (1)输入获取任意偶数数字num
* (2)将数字进行分解
* (3)在2-num 间遍历,找出之间的质数,判断若有a+b=num,(a,b为找出的质数),则猜想成立
*
*/
var Flag=true,a;
for(var i=6;i<10000;i+=2){
if(!canSplit(i)){
Flag=false;
break;
}
}
alert(Flag?'猜想成功!':"猜想失败")
//分解数
function canSplit(num) {
for(var k=2;k<num/2;k++){
if(isPrime(a)&&isPrime(num-a)){
return true;
}
}
return false;
}
//判断素数
function isPrime(x) {
for(var j=2;j<Math.sqrt(x);j++){
if(x%j==0){
return false;
}
}
return true;
}
函数的本质:直观理解就是实现某个独立功能的代码段,或者说它就是一个数据加工的黑箱子。
2.参数传递
参数传递分为值传递、引用传递。
值传递:
var a=5;
add(a);
alert(a);
function add(x) {
x++;
}
执行代码后,可以看到a的值并没有+1;可见形参和实参并没有任何关系。
引用传递:
var a=new Object();
a.value=5;
add(a);
alert(a.value);
function add(x) {
x.value++;
}
执行程序后可以知道a.value没有被显式修改,但是a.value的确+1了,因为x就是a,或者说x是a的别名,说的专业点就叫引用。
常规类型的参数采用的是值传递,比如Number 、String、Boolean。
对象类型采用的是引用传递,比如Object。
3.变量作用域
若函数内部变量没有声明,则视为全局变量。