函數聲明 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')
複製代碼