1、函数声明与函数表达式的区别
函数声明可以将函数的使用提升到函数所在语句之前,而函数表达式则不行,必须要在函数所在语句之后使用,否则会报“unexpected identifier”错误。
以下是实例:
(1)a();// 正确运行,返回hello
function a (){
return “hello”
}
(2)a(); //报错unexcepted identify
var a = function (){
return “hello”
}
2、函数内部属性,arguments和this
(1)arguments: 是一个类数组对象,包含着传入函数中的所有参数,主要用来保存函数参数,它有一个叫callee的属性,callee是一个指针,指向拥有这个arguments对象的函数;
(2)this:函数执行的环境对象(js中的一个重点,会单独分析)
3、apply()和call()
apply()和call()是每个函数都包含的两个非继承而来的方法,call和apply最大的用途是用来绑定函数的this指向,这样做的好处是解除对象和方法之间的耦合。
apply()和call()存在的唯一区别就是传参方式不同,call()必须明确的传入每一个参数,形如say.call(this, 参数1,参数2,参数3,...),而apply()则可以直接传入arguments对象或数组,如say.apply(this, arguments)或say.apply(this, [参数1,参数2,参数3,...])