函数
函数定义
1.函数又称为闭包,回调函数,构造函数 ,对象 ,数据 handler(处理程序) , 原型对象 ,方法(函数是一种特殊的对象,也能用语法糖)
2.函数就是一块代码,只有当函数被调用,事件触发时会运行函数代码块
3.函数调用是相互独立的,每一次调用它都会重新执行一次代码
eg:
function fn(){
console.log(1212)
}
fn()//1212
fn()//1212
4.函数定义的方法有三种
(1)函数声明语句
function fn() {
//执行的代码
}
(2)函数表达式
var fn = function () {
//执行的代码
};
//函数以分号结尾,因为它实际上是一个执行语句
(3)function内置构造函数
var fn = new function("hello word!","一些代码")
实参形参
1.函数的参数分为形参和实参
形参(函数显示的参数)在函数定义时列出
function myFunction(x, y) {
y = y || 0;
}//x,y就是形参隐式声明一个var x,y当被调用时他们的值为undefined
实参(函数隐式的参数)即真正被调用的参数值
function fn (n)//n是形参
{
var a=n*n//声明一个变量a为他赋值为n*n
console.log(a)
}
fn(100)//100是实际调用的值式实参n=100时a=10000
实参可以是任何数据,甚至可以是函数
eg:
function fn (cb)
{
cb()
}//fn调用fm时 var cb=function fm(){console.log(1212)}
function fm ()
{
console.log(1212)
}
fn(fm)//fm函数作为一种数据被fn调用,所以最后会打印1212
实例传入一个数字n,返回它的阶乘!n
var n=2//变量n赋值为2
var re=fn(n)//re赋值为函数调用2后的结果
console.log(re)
function fn (num) {//隐式声明var num
var sum=1;
for(i=1;i<=num;i++)//阶乘不能为0,所以i=1
{
sum = sum*i//eg:1=1*1,1=1*2,将右边的值赋给左边的值
}
return sum
}
函数的声明
1.函数的声明会提前,整个代码块一起提升(变量声明只是声明提前)
2.函数的定义式不一样,不能提升
参数赋值
1.参数是按顺序赋值,传多或传少的值为undefined
2.实参传多了可以用arguments
function fn (num1,num2)
{
console.log(arguments)
}
fn(100,200,300)
3.实参传少了有三种解决方法
function fn (num1=0,num2=0)//给形参num1,num2赋值为0
{
console.log(num1+num2)
}
function fn (num1,num2)
{
if(num1==undefined){num1=0}//当num1未定义时num1=0
if(num2==undefined){num2=0}//当num2未定义时num2=0
console.log(num1+num2)
}
function fn (num1,num2)
{
num1=num1||0;//当num1为真是num1=num1,当num1为假时,num1=0
num2=num2||0;//当num2为真是num1=num2,当num2为假时,num2=0
console.log(num1+num2)
}
函数是一种引用类型的数据
1.对象中成员的数据如果是函数: 方法,如果不是函数: 属性
eg:
var obj={name:"karen",age:18,say:function fm() {console.log(1111)}}
//name:属性,age:属性,say:函数方法
2.方法只能对象访问,方法的访问者只能是方法的持有者,方法的访问者不一定是方法的持有者
var obj={name:"karen",age:18,say:function fm() {console.log(1212)}}
//name:属性,age:属性,say:函数方法
fm()//调用fm函数
obj["say"]()//访问obj对象里的say:function fm(){console.log(1212)},值为1212