javascript笔记(JavaScript_Core电子书)-函数对象

/**
 * js函数
 * 赋值给一个变量
 * 作为一个对象的属性
 * 作为其他函数的参数
 * 作为其他函数的返回值
 */
//函数是一个独立的对象
function f(){
return "function f() body";
};
f.id = "fid";
f.name = "fname";
//alert(f);
//alert(f());
//alert(f.id+":"+f.name);

//函数的参数
//无论传多或少于函数的参数个数,都能正常执行函数。当小于函数形式参数个数时,其他形式参数为undefined,多余时舍弃
function param(a,b,type){
if(a ===undefined){
alert("func not hava a arg");
return false;
}else{
if(b ===undefined){
alert("second arg not in");
return false;
};
if (type ===undefined){
alert("third arg not in");
return false;
};
switch(type){
case "a": return a+b; break;
case "s": return a-b; break;
case "m": return a*b; break;
case "d": return a/b; break;
default:return "Error Type Param"; break;
}
}; 
}
//alert(param.length); //函数的参数个数
//alert(param());
//alert(param(2));
//alert(param(5,2));
//alert(param(5,2,"a"));
//alert(param(5,2,"c",7));
//当函数没有形式参数,可使用arguments
function sum(){
var result = 0;
for(var i = 0,len = arguments.length;i<len;i++){
if(isNaN(arguments[i])){  //不为数字
throw new Error("arg "+arguments[i]+" is not a number");
}else{
result += arguments[i];
}
}
return result;
}
//alert(sum(4,15,3,65,22));
//alert(sum(4,25,3,"b",22));


//函数作用域
//变量分为全局变量(在所有函数之外声明的变量)和局部变量(函数内部声明的变量)
//函数被js解释器装载时,会对函数的参数和局部变量进行初始化,当某对象在函数中被调用时
//会先在函数的对象作用域中找,没有时才找全局作用域对象(全局变量就是全局对象window的属性)
var strSp = "fullVar";

function strFunc(){
alert(strSp);             //undefined
var strSp = "localVar";   //localVar
return strSp;
}
//alert(strFunc()); //程序分析:strSp在函数中被调用(不会调用全局对象strSp),而strSp没有赋值所以undefined(对象不赋值默认初始化为undefined)


//函数上下文
//函数是独立的对象,可以作为其他任意对象的方法,所以函数中this是可变的
//使用call和apply传入函数的上下文
var objCon1 = {
name:"Dog",
age:3
};
var objCon2 = {
name:"Cat",
age:2
}
function getName(){
return this.name;
};
//alert(getName.call(objCon1));
//alert(getName.apply(objCon2));


//函数的使用
//1、赋给一个变量
function addFunc(a,b){
return a+b;
}
var useObj = addFunc;
//alert(useObj(3,5));

//2、作为一个对象的属性
var obj = {
message:addFunc
};
//alert(obj.message(6,5));

//3、作为其他函数的参数
function subFunc(str,len){
return str.substring(0,len);
}
function outFunc(str,len,func){
return func(str,len);
}
//alert(outFunc("abcdefg",4,subFunc));

//4、作为其他函数的返回值
function showMessage(){
return function(){
alert("inside showmessage");
}
}
alert(typeof showMessage());//showMessage()返回的是一个函数对象
showMessage()();

//5、匿名自执行函数(定义后立即执行)
var data = {a:"3",b:"6"};
(function(obj){alert(obj.a*obj.b);})(data);//第一个()返回函数对象,第二个()立刻执行函数(可传入参数)

转载于:https://my.oschina.net/u/150107/blog/56968

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值