函数也是对象,但一点不同
- 函数存在一个 call 的内部属性,表明函数可执行
- typeof 对任何具有call属性的对象,都返回“function”
function fun(){
console.log(typeof fun.call);
}
fun()
函数的参数
- 函数的length属性,即为参数的个数
- 函数中,arguments.length,也表示参数的个数
- js中函数没有重载,但可以通过参数个数的不同来实现
- 检查参数是否为未定义时,不要用arguments.length===0
function fun(a,b){
console.log(arguments.length);
console.log(fun.length);
}
console.log(fun.length);
fun(1,2)
函数的变量提升
- 使用var关键字(函数表达式),没有变量提升效果
- 不同于函数表达式,函数声明则可以提升
console.log(fun1);
var fun1 = function fun1(){
console.log(fun1.name);
}
理解【函数就是值】
this指向的是对象
- 只有对象实例的方法,this才表示该对象
- 如果是函数,内部的this指向函数外层,一般为window
改变this,call、apply、bind
- call的参数,第一个为绑定对象,第二个往后均为参数
- apply的参数,第一个为绑定对象,第二个为所有参数组成的数组
- bind的参数,同call
function sayAge(name){
console.log(name + " "+this.age);
console.log(name + " "+this.name);
}
var gs = {
age:19,
name:"gs"
}
var zk = {
age:23,
name:"zk"
}
var age = 100;
var name = "lili"
var sayAgeOfGs = sayAge.bind(gs);
console.log(sayAgeOfGs("gs"));
var sayAgeOfZk = sayAge.bind(zk,"zk");
console.log(sayAgeOfZk());