函数

2017-05-19  本文已影响0人  daisx

函数的创建方式
(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();//第二次调用会覆盖之前定义的函数

补充:

上一篇下一篇

猜你喜欢

热点阅读