函数
什么是对象
任意值的集合
//demo
var cat = {
'name':'tom',
'age':4,
'family':['father','mom'],
'speak':function(){
console.log('miao');
},
'friend':{
'name':'jerry',
'age':4
}
};
使用对象
创建
var cat = new Object();
var cat = {};
访问属性
cat.name = 'tim';
cat['name'] = 'tim';
console.log('name' in cat); //属性在这个对象是否存在
//使用for in 遍历对象
for(var p in cat){
console.log(p);
}
什么是函数
一次封装,四处使用
//函数也是对象
function add(n1,n2){
return n1 + n2;
}
add.sex = 'male';
add.setSex = function(sex){
this.sex = sex;
}
console.log(add.sex);
console.log(add.setSex('female'));
console.log(add.sex);
console.log(add(1,2));
//作为数据值使用
var person = {};
var add = function(){
return 1;
}
//作为参数
setTimeout(fn,1000);
function fn(){
console.log(1);
}
//作为返回值
function fn(){
return function(){
console.log(2);
}
}
fn()();
函数的定义
//三种定义方式
//字面量
// function声明
function add(){
//body..
}
add();
//var赋值表达式
var add = function (){
//body..
};
add();
//两者的区别是预解析的问题
//构造函数
new Function('num1','num2','return num1+num2');
add();
函数的调用
//普通函数调用
add()
//匿名函数调用
(function(){ //不让function开头
})();
(function(){
}());
!+-~function(){
}();
//递归调用
function factorial(num){
if (num == 1) return 1;
return num * factorial(num - 1);
}
console.log(factorial(20)); //2432902008176640000
//方法的调用
var method = {
add:function(n1,n2){
return n1+n2;
},
'@':function(){ //非法字符使用引号
console.log('@');
}
}
console.log(method.add(1,1));
console.log(method['@']) //非法字符使用中括号调用
document.onclick = function(){
console.log('你点击了文档');
}
document.onclick(); //模拟鼠标的点击
//链式调用
var method = {
add:function(n1,n2){
console.log(n1+n2);
return this;
},
subtract:function(n1,n2){
console.log(n1-n2);
return this;
}
}
method.add(1,2).subtract(2,1);
构造函数的调用
function Person(){
//body...
}
var obj = new Person();
函数的间接调用
var name = 'xm';
var person = {};
person.name = 'xh';
person.getName = function(){
return this.name;
};
console.log(person.getName());
console.log(person.getName.call(window)); //修改this的指向
console.log(person.getName.apply(window)); //修改this的指向
function add(n1,n2){
return n1+n2;
}
console.log(add(1,2));
var datas = [1,2];
console.log(add.call(window,1,2));
console.log(add.apply(window,datas)); //传递的是数组
参数
参数分为实参和形参
参数的个数
//参数的个数
function add(num1,num2){
return num1+num2;
}
// 1.实参 == 形参
add(1,2)
// 2.实参 < 形参
add(1)
num1 = 1;
num2 = undefined;
// 3.实参 > 形参
function add(){
if (arguments.length == 0) return;
var sum = 0;
for(var i=0;i < arguments.length;i++){
sum += arguments[i];
}
return sum;
}
arguments
类似数组的对象
arguments.callee
function add(num1,num2){
console.log(arguments.callee); //表示函数自身
return num1+num2;
}
//在需要修改类名的时候提高效率
function factorial(num){
if (num <= 1) return 1;
return num * arguments.callee(num - 1); //严格模式不允许使用
}
//另一种使用别名的方式
var factorial = function fn(num){
if (num <= 1) return 1;
return num * fn(num - 1);
}
//只有形参和实参数量相同时返回值
function add(num1,num2){
if(arguments.length != add.length) throw new Error('请传入' + add.length + '个参数');
return num1+num2;
}
console.log(add(1,1));