一、通过构造函数创建函数
- 函数也是一个对象,而且是具有功能的对象
- 创建函数对象:var fun=new Function();
- 创建函数:var fun=new Function(‘console.log(“123”)’);
- 函数也可以添加属性:fun.hello=“hello”
var fun=new Function();
console.log(typeof fun);
var fun1=new Function('console.log('函数体')');
fun1();
var fun2=new Function();
fun2.hello="hello";
console.log(fun2.hello);
二、函数声明
- 语法:function 函数名([形参1,形参2…]){函数体}
- 调用该函数时解析器不会检查实参的类型
- 调用该函数时解析器不会检查实参的数量
function fun1(a,b){
console.log(a+b);
}
fun1(123,undefined);
function fun1(a,b){
console.log(a+b);
}
fun1(123,undefined,123,null,"321");
三、函数的形参和返回值可以是任何类型的数据
- 任何类型的数据:String Number Boolean null undefined object function
- 区分函数名,函数名()区别
function sum(a,b){
console.log(a+b);
}
function fun1(a){
a(1,2);
}
fun1(sum);
function fun1(){
function fun2(a){
console.log(a+2);
}
return fun2;
}
var fun=fun1();
fun(1);
var fun=function(){
return 1;
}
fun();
fun;
四、立即执行函数
(function(){
console.log("立即执行");
})();
五、函数与方法
Number('123');
var obj={
name:"小明"
sayName:functtion(){
console.log(this.name);
}
}
六、this的指向基础问题
- 解析器在调用函数时每次都会向函数内部传递一个隐含的参数(上下文对象)
- 根据函数的调用方式的不同,this会指向不同的对象
- 以函数的形式调用时,this永远指向window对象
- 以方法的形式调用时,this是指向调用方法的那个对象
function fun(){
console.log(this);
}
fun();
var name="全局下的变量(this指向window)"
function fun(){console.log(this.name);
var obj1={
name:"指向调用者obj1",
sayThis:fun
};
var obj2={
name:"指向调用者obj2",
sayThis:fun
};
obj1.sayThis();
obj2.sayThis();
fun();
欢迎访问我的个人博客