函数
函数:可以封装任意多条语句,而且可以在任何地方、任何时候调用执行
一、函数创建
1、 function 函数名(){代码段}
函数的声明---普通函数声明
通常来说函数的声明会有一个返回值,如果没有设置return,该函数默认返回未undefined,如果设置,将返回该值。执行函数后会返回该值。
案例:
function sum(){
var s=3+4;
return s;
}
console.log(sum()); //返回7
2、 function(){代码段} //匿名函数
可以在对象属性中使用匿名函数
3、 构造函数用于理解对象,实际意义不大
二、函数的调用
函数名()
匿名函数时,变量名()
new 函数名(),函数执行但是返回值是this指向
function Abc(){
var s = 3+4
console.log(s)
this.name = "张三"
this.age = 16
return s
}
var box = new Abc()
console.log(box) //返回一个空对象
// new 构造函数的返回值this
// return 返回值并结束函数
自执行函数
var s1 = (function(){
return 7
})()
递归调用
递归调用
函数调用函数本身
function sum(i,s3){
console.log(i,s3)
if(i<=10){
return sum(i+1,s3+i)
}else{
return s3
}
}
(function(){})()
(function(){}())
!function(){}()
三、call()和apply()
函数名.call([改变this指向][,参数1][,参数2...])
函数名.apply([改变this指向][,数组])
call()调用函数,改变函数内的 this指向
实程时有些特殊情况导致,对象方法中的 this没有对象本身,这时使用call()强制改变 this指向
multy.call({name:"刘德华"},1,1)
与call()功能相同的apply()
apply函数传递参数时用数组
multy.apply({name:"张学友"},[1,1])
删除函数:普通函数无法删除。匿名函数通过将变量设置为 null来删除函数。对象中的方法,使用delete删除。
案例一:
var box = function(){
var sum = 2+3
console.log(sum)
return sum
}
console.log(box())
// box=null删除匿名函数
// box = null
// console.log(box())
案例二:
var obj = {
a:function(){
console.log("Hello JavaScript")
}
}
obj.a()
// 对象中方法删除delete obj.a
// delete obj.a
// obj.a()
四、参数和返回值
所有函数都有参数和返回值
参数-形参和实参
案例一:
function sum1(a,b){
return a+b
}
console.log(sum1(2,3))
console.log(sum1(4,5))
返回值,使用 return返回并结束函数
面向对象三大特征:封装、继承、多态
程序代码优劣原则:高内聚、低耦合
argument对象,实现求最大值、最小值、计算累加、计算累乘
案例一:
function max(){
console.log(arguments)
var m = arguments[0]
for (var i = 0; i < arguments.length; i++) {
if(arguments[i] > m){
m = arguments[i]
}
}
return m
}
console.log(max(11,8,6,7,2,3))
return 返回值并结束函数,return 后的代码不执行
continue/break 跳出循环
五、函数也是对象
只能通过点语法添加属性和方法,函数名就表示这个对象
调用对象的方法时,this指这个对象
函数的 length属性表示形参个数,所有对象都prototype属性即原型对象