1.函数
引用数据类型
(1)函数的作用
1)特定功能代码的封装;
2)用来创建对象
(2)函数的定义
1)函数声明(函数的声明会提升);;:
关键字 函数名(形式参数){
函数体
返回值
}
function add(a,b){
return a+b
}
2) 函数表达式:
var add=function(){ } //匿名函数
var a=1
var o={}
(3)函数的调用
函数名(实际参数)
函数名.call(obj,参数列表)
obj => this
call => 可以接受无数个参数
函数名.apply(obj,参数数组)
obj => this
apply => 只能接受两个参数
(4)函数的作用域
1)在函数内部定义的的变量,在函数外部访问不到;
2)在函数外部定义的变量,在函数内部可以访问到,这个变量和这个函数就组成了闭包;
3)在函数内部不存在局部作用域
function test(){
if(true){
var a=1
}
console.log(a)
}
4)如何在函数中定义一个局部变量
let
立即执行函数
(function(){
console.log(999)
}) ()
(5)函数在内存中的表现形式
(6)函数内部属性
形式参数只是接受参数的快捷方式,实际的参数保存在arguments中
1)参数
function add(a,b){
console.log(a,b)
}
console.log(1,2,3,4)
2)arguments
类数组对象,实际参数保存的地方
[1,2,3,4,5]
{'0':1,'1':2,'2':3}
3)this
this的取值和调用它的对象有关,哪个对象调用它,那么this就指向那个对象
观察函数名前面有没有对象,如果有对象,那么this指向该对象;如果前面没有对象,this指向全局对象(global、window)
指定this
call(obj,)
apply(obj,)
(7) 函数作为值、函数作为参数、函数作为返回值
1)函数作为值
var a = 3
var add = function(){}
var add1 = add
2)函数作为参数 (回调函:函数作为参数)
test(1,2,function(){})
3)函数作为返回值
function add(){
return function add1(){
}
}
var a=add()
console.log(a) => 函数
(8) 值传递和引用传递
var a = 2
var b = a
b=10
a不变
var add = function(){}
var add1 = add