函数声明 or 函数表达式
函数声明
function add (){
}
复制代码
函数表达式
- 没有函数名称,是个匿名函数。会被赋值到一个变量。
- 结尾要有逗号。
var add = function(){
};
复制代码
函数声明会被提高,函数表达式不会。
add(1,2)
function add(a,b){
return a+b;
}
add(1,2)
var add = function(a,b){
return a+b;
};
复制代码
函数参数
- 参数都会被放到arguments里面,arguments是一个类数组,不是真正的数组。可是有数组的方法。
console.log(Array.isArray(arguments))
复制代码
js中函数没有重载
function log(){
console.log(1)
}
function log(){
console.log(2)
}
log()
复制代码
改变对象中的this指向
- call()的第一个参数是函数执行时this的值
- call()的第二个参数是向函数中传递的参数
function obj(lable) {
console.log(lable+':'+this.name)
}
var person1 = {
name:'aaa'
}
var person2 = {
name:'bbb'
}
var name = 'ccc'
console.log(obj.call(this,'window'))
console.log(obj.call(person1,'person1'))
console.log(obj.call(person2,'person2'))
复制代码
- apply()的第一个参数是函数执行时this的值
- apply()的第二个参数是向函数中传递的参数,为数组或相似数组的对象
- apply()的用法和call()同样
function obj(lable) {
console.log(lable+':'+this.name)
}
var person1 = {
name:'aaa'
}
var person2 = {
name:'bbb'
}
var name = 'ccc'
console.log(obj.call(this,['window']))
console.log(obj.call(person1,['person1']))
console.log(obj.call(person2,['person2']))
复制代码
- 第一个参数是绑定的this对象
- 第二个参数无关紧要
function obj(lable) {
console.log(lable+':'+this.name)
}
var person1 = {
name:'aaa'
}
var person2 = {
name:'bbb'
}
var aaa = obj.bind(person1)
person('person1')
var bbb = obj.bind(person2,'person2')
bbb()
bbb.sayname = aaa;
bbb.sayname('aaa')
复制代码