6函数
6.1 函数的概念
方案一:循环的嵌套
程序复杂,阅读困难
方案二:函数方法
分解问题,以“多”制胜,“大事化小”
for(var n=2;n<=100;n++){
if(isPrime(n)){
document.write(n+"<br>");
}
}
function isPrime(n){
var m = Math.ceil(Math.sqrt(n));
var found = false;
for (var i = 2; i <= m; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
提供了一个解决规模大、难度高的问题的思路,即将问题分解为一个个简单,规模小的问题。“大事化小 ”
6.2 定义与调用
函数的定义:functio isProme (n) {
...
}
函数头部,体现函数的设计
函数体,体现函数的实现过程
哥德巴赫猜想
var num =Number(prompt("请输入一个大于6的函数"));
var falg = true;
for (var i=6;i<10000;i+=2){
if(canSplit(n)){
falg = false;
break ;
}
}
alert("哥德巴赫猜想"+(falg?"成功":"失败"));
/*
* 如果系统有一个能判断素数
* 名称;isPrime
* 输入参数:待判断得数
* 输出结果:true/flase
* */
function canSplit(n){
for(var a=2;a=n/2;a++){
if(isPrime(a) &&isPrime(n-a)){
return true;
}
}
return false;
}
函数的本质:实现某个独立功能的代码段
“黑箱子”:只关心能否得到想要的结果、需要输入的数。。。。不管工作的原理
6.3 参数传递
所谓参数传递就是将实参的值传递给形参,在调用
两种方式:指传递,引用传递
<script>
var a = 5;
increase(x);
alert(a);
function increase (x){
x++;
}
</script>
var a =new Object();
a.value = 5;
increase (a);
alert(a.value);
function increase (x){
x.value++;
}
a.value没有被显示修改,但是加了1,因为x就是a。或者说x是a的别名。
常规类型的参数采用的是值传递
对象类型采用的是引用传递
如果希望把参数从函数中带出来,但是函数的返回值只有一个
6.4 变量作用域
局部变量:在函数内部定义的变量,只能在函数内部使用,不会影响到全局
全局变量:在函数外部定义的变量,可在全局进行使用
在函数内部定义一个变量,如果没有加上var,那么这个变量被认为全局变量
function localAllVar(){
a = 1;
}
function test(){
alert(a);
}
localAllVar();
test();
alert(a);
冲突处理:就近原则,就内部近
在局部和全局都定义了相同的名字的变量时,在局部中加上window的前缀
就会访问全局变量
当在函数中定义了一个和全局变量名相同的变量,此时在函数中定以前使用,那么这个变量还是函数中的变量,不使用全局变量