js 函数
来源:互联网 发布:seo超级伪静态 编辑:程序博客网 时间:2024/06/04 19:37
为什么需要用函数?
将一个比较复杂的问题分解为两个较为简单的问题去解决,使用“量”去克服“难”和大的问题,也就是大事化小
这种解决方案给我们提供了一个解决规模宏大,难度较高的问题结局思路,它分解为多个规模相对较小,难度相对较低的问题去解决,如果分家而后的问题
仍然规模大或者难度高,可以按照这个思路一直分解下去,直到分解后的问题足够小、简单。归纳起来就是“大事化小”。
下面来看一下用函数与不用函数的比较:
不用函数:
for(var n=2; n<100;n++){
var m = Math.ceil(Math.sqrt(n));//根据数学定理,判断范围可进一步缩小至【2,sqrt(n)】
var flag = false;
for(var i=2; i<=m; i++){
if(n % i == 0){
flag = true;
break;//找到则提前结束
};
};
alert(flag?"不是素数":"是素数");
if(!flag){
document.write(n+"是素数</br>")
}
}
这种解决方案程序比较复杂,阅读也比较困难,需要较高超的技术
使用函数:
for(var n=2; n<=100; n++){
if(isPrime(n)){
document.write(n+"<br>")
}
};
function isPrime(n){
var m = Math.ceil(Math.sqrt(n));//根据数学定理,判断范围可进一步缩小至【2,sqrt(n)】
for(var i=2; i<=m; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
这种解决方案是将一个比较复杂的问题分解为两个较为简单的问题去解决,使用“量”去克服“难”和大的问题,也就是大事化小
这种解决方案给我们提供了一个解决规模宏大,难度较高的问题结局思路,它分解为多个规模相对较小,难度相对较低的问题去解决,如果分家而后的问题,
仍然规模大或者难度高,可以按照这个思路一直分解下去,直到分解后的问题足够小、简单。归纳起来就是“大事化小”。
说了这么多了,那么该怎样使用呢?
定义:function 函数名(形参){
函数体
}
函数头部:体现的是函数的设计(最重要 上层建筑)
函数体:体现的是函数的实现过程
如何实现:
函数的本质:直观理解,就是实现某个独立功能的代码段。或者说他就是数据加工的黑箱子。
所谓黑箱子,就是我们只关心外面的东西,比如说他是干啥的,需要输入什么,可以得到什么结果,而不关心里面是怎么工作的。
忽略实现细节
参数的传递:
所谓参数传递,就是将实参的值传递给形参,通过调试可以确定形参在函数内被调用之前是不存在的,当函数被调用的那一刻,实参被创建,并且把实参的值传递给形参。
参数传递有两种方式:值传递和引用传递
值传递案例:
var a = 5;
increase(a);
document.write(a);
function increase(x){
x++;
}
可看出
a的值并没有显示预期的6,还是5,因为形参和实参是两个不同的变量,x的变化和a没有任何关系
引用传递:
value没有被显示修改,但a.value确实是加1了,因为x就是a,或者说x是a的别名,专业一点就叫引用。
常规类型的参数采用的是值传递,比如Number、string、boolean
对象类型采用的是引用传递,Object。
如果希望把参数从函数中带出来,但是函数的返回值只有一个。
函数的作用域:
局部变量:在函数内部定义的变量,这个变量只能够在函数的内部使用,在全局中不能使用,
全局变量:在函数外部定义的变量,这个变量在全局进行使用,比如汉朝皇帝发布了命令,那么不管是袁绍还是曹操都要听这个命令。
冲突处理原则:就近原则。
当函数中定义了一个和全局变量想听的变量,此时在函数中再顶以前使用,那么这个变量还是函数中的变量,为undefined,不适用全局变量。
要理解就近原则,而不是从上到下。
在函数内部定义一个变量,如果没有加上var,那么这个变量被认为是全局变量
局部和全局同时定义了一个相同名字的变量时,如何在局部里面访问全局变量?
在局部中给变量加上window的前缀,就可以访问到全局的变量。
学习了这么多,给大家不止一个任务,
设计并实现求一个四位数重新排列组合得到的最大和最小(尽量不用数组)