1、函数介绍
- 函数概念: 将任意代码封装到一起,需要用的时候进行调用执行
- 语法
// 函数定义
function 函数名(){
函数体 //封装的代码
}
//函数调用语句:
函数名()
如: 定义一个求最大值的函数
function max(){
var m = 34
var n = 23
var max = m
if(max < n){
max = n
}
console.log('最大值',max)
}
max() // 调用函数执行
- 调用方式
2、函数参数
- 参数分类
-
形参: 定义函数时,在函数名括号中定义的变量,故直接省略var
就是在函数内部可以使用的变量,在函数外部不能使用 形参的值是在函数调用的时候由实参决定的
-
实参:在函数调用的时候给形参赋值的,
也就是说,在调用的时候是给一个实际的内容的 多个参数的时候,是按照顺序一一对应的
- 传参过程
-
参数个数
-
形参比实参少:- 因为是按照顺序一一对应的,行参少就会拿不到实参给的值,所以在函数内部就没有办法用到这个值 -
形参比实参多:因为是按照顺序一一对应的,所以多出来的行参就是没有值的,就是 undefined -
参数默认值
3、函数返回值
- return 返回的意思,其实就是给函数一个 返回值 和 终断函数
- 终断函数
- 当我开始执行函数以后,函数内部的代码就会从上到下的依次执行
- 必须要等到函数内的代码执行完毕
- 而 return 关键字就是可以在函数中间的位置停掉,让后面的代码不在继续执行
- 返回值:return 关键字就是可以给函数执行完毕一个结果
4、函数类型
5、函数优点
1. 封装代码,使代码更加简洁
2. 复用,在重复功能的时候直接调用就好
3. 代码执行时机,随时可以在我们想要执行的时候执行
6、函数定义方式
声明式函数定义
function fn(){
}
函数表达式, 也称赋值式函数定义
var fn = function(){
}
7、预解析
-
js代码执行解析过程
-
预解析 =>浏览器javascript引擎解析执行javascritp代码, 执行javascritp代码 之前,扫描通读js代码,如果发现声明式函数和var声明的变量,将其提前, 只是把声明提前,后赋的值并不会 -
需要解释的内容有两个:声明式函数名和var变量名相同时,函数优先
-
同名变量和函数解析方式 预解析,如果遇到同名变量和函数,函数优先
-
if条件不管成不成立语句块都会解析
-
return语句后代码不执行,但会进行预解析
8、练习
- 求12345*...99100 的乘积
1. 求1*2*3*4*5*...*99*100 的乘积
function fn(){
var product=1
for(var i=1;i<101;i++){
product=product*i
}
document.write(product);
}
fn()
- 求斐波那契数列、输出数列中的第8个数?
2、递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ...
function feb(n){
if(n==1 || n==2){
return 1
}
return feb(n-1)+feb(n-2)
}
n=10
document.write('斐波拉契数列的前'+n+'个数为:')
for(var i=1;i<=n;i++){
document.write(feb(i)+' ')
}
n=8
document.write('斐波拉契数列的第'+n+'个数为 '+feb(n)+'<br>')
- 百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只
3、百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只
document.write( '<br>'+'---11、百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只---'+'<br>')
function buyChecken(){
for(var x=1;x<20;x++){
for(var y=1;y<34;y++){
z=100-x-y
if(100==5*x+3*y+z/3){
document.write(x+' '+y+' '+z+'<br>')
}
}
}
}
buyChecken()
4.求100-200内的质数 质数,除了1和自身外不能被其它数整除的数
4、求100-200内的质数 质数,除了1和自身外不能被其它数整除的数
document.write( '<br>'+'---12、求100-200内的质数 质数,除了1和自身外不能被其它数整除的数---'+'<br>')
function getPrimeNumber(){
for(var n=100;n<201;n++){
for(var i=2;i<n;i++){
if(n%i==0){
break
}
}
if(n==i)
document.write(n+' ')
}
}
getPrimeNumber()
- 求所有水仙花数 水仙花数定义: 水仙花数是一个三位数,各位立方之和等于它本身
document.write( '<br>'+'---13. 求所有水仙花数---'+'<br>')
function getNN(){
for(var n=100;n<1000;n++){
x=parseInt(n/100)
y=parseInt(n/10)-x*10
z=n-x*100-y*10
if(n==x*x*x+y*y*y+z*z*z){
document.write(n+' ')
}
}
}
getNN()
6、面试传参题:最后输出abc,fun()中的data只是实参,代表具体值,并非指变量data,具有迷惑性