1.js中的函数也是对象,可以像对象那样操作和传递
函数包括函数名,参数列表,函数体
this arguments 作用域 不同调用方式 不同创建方法
2.函数的调用方式
直接调用 foo()
对象方法 o.method()
构造器 new foo()
原型链上的方法call/apply/bind func.call(o);
3.创建函数的方式
函数声明 function foo(a,b){}
函数表达式var add = funcition(a,b){}
(function(){})
return function(){}
命名函数表达式var add = funcition foo(a,b){}
函数构造器var func()=new Function('a','b');
var func()=Function('a','b');
函数声明和函数表达式的区别:a.只有函数声明会被前置;b.函数声明不可以被立刻调用;c.只有函数声明可以再在定义该函数的作用域内通过函数名访问
4.this关键字
全局的this 指向window
一般函数的this 指向window
作为对象方法的函数this,把函数作为对象方法,this一般会指向对象
var o= {prop:37;f:function(){return this.prop}}; logs 37
var o = {prop:37} function independent(){return this.prop;//此处this指向window} o.f=independent;
对象原型链上的this
get/set方法的this 指向get/set方法所在的对象
构造器中的this
call/apply/bind中的this
判断this的指向(1-4优先级逐级递减,1优先级最高,4优先级最低):
1、函数被new调用,this指向由new新构造出来的这个对象;
2、函数通过call()、apply()、bind()调用,this指向被绑定的对象;
3、函数作为方法被调用,this指向这个对象(即常说的对象上下文);
4、默认(非严格模式)情况下,this指向window, 严格模式下,this指向undefined
5.函数属性arguments