一,函数定义
函数的三种定义方式
1.函数声明定义(一般封装用 可以声明提升)
function函数名(){}
函数名();
2.函数表达式定义 (不存在声明提升 会报错)
-
2.1匿名式函数表达式
var fn = function(){} 看function后面有没有名字 没有名字就是匿名
-
2.2.命名式函数表达式
var fn = function show(){} fn();
3.构造函数定义
var fn = new function("x","y","alert(x+y)");
fn(1,2);
二,函数调用
1.函数模式调用
var b = "啊啊啊";//创建的全局变量在window里面
function show(){
var b = "哦哦哦"
console.log(b);
}
show();
猜想最后会输出哦哦哦还是啊啊啊
因为会先使用函数里面的变量 那么如何输出外面的啊啊啊呢 用this
var b = "啊啊啊";//创建的全局变量在window里面
function show(){
var b = "哦哦哦"
console.log(this.b);
}
show();
this
2.方法函数调用
当函数体在对象里面
var age = 28;
var obj = {
"age":18,
"fn":function(){
console.log(age);//28
console.log(this.age);//18 因为是obj调用的 所有this是obj
}
}
obj.fn();//函数调用
函数方法调用
3.构造函数
function Person(){
console.log("aaa");
}
var ming = new Person(); //已经实例化不需要再写了
ming;
构造函数调用
三,call和apply
call和apply都是用来改变this的指向的 下面来举一个例子
首先创建两个对象 一个teacher对象 一个student对象 ,然后用teacher的this去指向student里面的变量
var teacher = {
ming:"张三",
fn:function(a,b){
console.log("姓名"+this.ming+"班级"+a+"成绩"+b);
}
}
//调用
teacher.fn(1,60);
var student = {
ming:"侯旭"
}
//使用call和apply改变this指向
teacher.fn.call(student,2,100 )
teacher.fn.apply(student,[3,85]); //多个值就是传参时的形式不一样 apply是数组
apply和call
- call和apply的区别
call里面的参数正常去写
apply多个参数的时候后面要用[ ]去写
网友评论