§ 函数
(1)函数
□ a、函数字面量
var say = function(){ }
□ b、函数声明
function say() { }
□ c、匿名函数
function() { }
在被创建时立即调用
(function () {} ) ()
(声明) ()
□ d、对象中
var obj = {
◊ name:'lisi'
◊ say:function(){ }
}
obj.name
obj.say()
obj["say"]()
® js解析器优先解析函数声明,然后解析使用var操作符声明的变量,但赋值undefined
® 函数内部代码,在函数调用时执行
/*解析:
function run(){}
function work(){}
var say;
run();
say = function(){}
*/
//console.log(say); //undefined
//say(); //say is not a function
run(); //run-----
var say = function(){
console.log("say-----");
}
function run(){
console.log("run-----");
}
function work(){
console.log("work-----");
}
var a = 10;
var a = 20;
console.log(a);
function say(a){ }
function say(a, b){ }
say(10);
js没有重载概念,只要函数名相同,即为重写
□2、函数的调用
® 函数名()
® new 函数名()
□ 3、函数的参数
® 形式参数:当前函数需要的参数
® 实际参数:实际调用方法时传递的参数
function say(形式参数){}
var say = function(形式参数){}
say(实际参数);
形参个数和实参个数可以不一致,并且数据类型不限
function say(a, b){
//var a;
//var b;
console.log(a, b);
}
say(10);
□ 4、函数的内部属性
® arguments:
◊ 类数组对象:包含实际参数
} [Arguments]{0:1,1:2}
function say(a,b){
//1.var a;var b;
//2.1->arguments[0]
//2->arguments[1]
//3->arguments[2]
//3.argumnets[0]->a
//arguments[1]->b
console.log(a,b);
console.log(arguments);
}
say(1,2,3);
} 用来保存实参对象
◊ length:实参个数
◊ callee:从函数内部指向当前拥有arguments的函数
减少重复计算
◊ this:
} this指向函数赖以生存的环境对象
} 函数的this值什么时候确定?
– 在函数被调用时确定
} 指向谁?
– 当前拥有this的函数被谁调用,被谁调用就指向谁
} 链式作用域
var length = 10;
function say(){
//length = 30;
alert(this.length);
}
var obj = {
length: 20,
say: say,
run: function(handler){
handler();
alert(this.length);
}
}
//say();
//obj.say();
obj.run(say); //相当于window调用
□ 5、作为值的函数和作为返回值的函数
® 值:
function say(){ }
var handler = say;
handler();
function run(h){
h();
}
run(say);
® 返回值:
/*function say(){
var a = 10;
return a;
}
var result = say();*/
// console.log(result);
/*var length = 10;
function say(){
console.log("say====");
return function(){
alert(this.length);
}
}
var result = say();
// result = function(){}
result();*/
function say(){
var a = 10;
function inner(){
var b = 20;
console.log(a);
console.log(b);
}
return inner;
}
var result = say();
result();
□ 6、函数的属性
function say(){}
obj:{
say: function(){}
}
对象名.属性名
length:
say.length:返回当前函数的形参个数
prototype:原型对象
用来存储非静态方法/公有属性和方法
call():
函数的调用方式
函数名.call(this, 实际参数列表)
say.call(this, 1, 2, 3, 4)
apply()
函数的调用方式
函数名.apply(this,[实参列表])
say.apply(this, [1, 2, 3, 4])