函数
函数的创建方式
(1)函数声明 function 函数名 (形式参数){函数体}
(2)函数表达式
A:匿名函数表达式
B: 命名函数表达式
(3)function构造函数来创建函数
创建函数的参数和函数体var fn=Function(){‘形参1’,‘形参2’,‘函数体’}
多个参数情况下,最后一个参数为函数体。
如果只有一个参数,这一个参数就是函数体,
如果没有参数,函数为空函数。
anonymous()匿名函数???
函数传递参数需要包装为字符串来传参
函数的原型链
函数与原型关系
原型对象是否在原型链
Function instanceof Function
Object instanceof Object
Object instanceof Function
函数的特殊点:
(1)函数可以动态创建
(2)函数可以赋值给变量,可以被扩展、删除(作为对象的方法时删除)
(3)函数可以作为其他函数的参数(函数回调)和返回值
函数最为返回值:
var cont=(function f(){
var x=0;
return function (){
x++;
return x;
}
})();
console.log(cont());
console.log(cont());
console.log(cont());
Paste_Image.png
(4)函数可以拥有自己的属性和方法
(5)JS中没有块级作用域,
(7)函数式第一型的对象(对象拥有的都拥有):可以做参数;可以赋值给变量,可以当返回值
(8)函数拥有name属性,用log打印是函数的函数名。
注意点:如果作为参数的函数是对象的方法,那么在函数调用的时候,(会把实参的值赋值给形参)在这个过程中,函数的调用方式发生了改变,所以需要注意this的指向。
解决办法:绑定函数内部的this,指向正确的对象。
示例代码:
function f(callb,callobj){
//绑定caab方法中的this、让this总是指向原来的对象。
callb.call(callobj)
};
var obj={
name:'css',
show:function(){
console.log(this.name);
}
}
f(obj.show,obj)
回调函数:
function f(call){
call();
}
function demo(){
console.log('demo');
}
f(demo);
惰性函数:函数的实际内容在调用了一次后才会被确定,第一调用时初始化,重新定义函数。
function foo(){
console.log('foo');
foo=function(){
console.log('foo,foo');
}
}
foo();//第一次舒适化操作。
foo();//第二次调用会覆盖之前定义的函数
补充: