您的位置:首页 > Web前端 > JavaScript

JS中的函数

2016-03-25 16:04 423 查看

函数类型

在JS中函数可以分为两种,具名函数(命名函数)和匿名函数。

区分这两种函数的方法非常简单,可以通过输出 fn.name 来判断,有name的就是具名函数,没有name的就是匿名函数。

获取指定函数的函数名称方法

/**
* 获取指定函数的函数名称(用于兼容IE)
* @param {Function} fun 任意函数
*/
function getFunctionName(fun) {
if (fun.name !== undefined)
return fun.name;
var ret = fun.toString();
ret = ret.substr('function '.length);
ret = ret.substr(0, ret.indexOf('('));
return ret;
}


创建函数的几种方式

声明函数-具名函数

最普通最标准的声明函数方法,包括函数名及函数体。

function fn1(){}


创建匿名函数表达式-匿名函数

创建一个变量,这个变量的内容为一个函数

var fn1=function (){}


注意采用这种方法创建的函数为匿名函数,即没有函数name

var fn1=function (){};
getFunctionName(fn1).length;//0


创建具名函数表达式

创建一个变量,内容为一个带有名称的函数

var fn1=function xxcanghai(){};


注意:具名函数表达式的函数名只能在创建函数内部使用

即采用此种方法创建的函数在函数外层只能使用fn1不能使用xxcanghai的函数名。xxcanghai的命名只能在创建的函数内部使用

测试:

var fn1=function xxcanghai(){
console.log("in:fn1<",typeof fn1,">xxcanghai:<",typeof xxcanghai,">");
};
console.log("out:fn1<",typeof fn1,">xxcanghai:<",typeof xxcanghai,">");
fn1();
//out:fn1< function >xxcanghai:< undefined >
//in:fn1< function >xxcanghai:< function >


可以看到在函数外部(out)无法使用xxcanghai的函数名,为undefined。

注意:在对象内定义函数如var o={ fn : function (){…} },也属于函数表达式

Function构造函数-匿名函数

可以给 Function 构造函数传一个函数字符串,返回包含这个字符串命令的函数,此种方法创建的是匿名函数。

new Funciton("alert(1)");


自执行函数-匿名函数

(function(){alert(1);})();
(function fn1(){alert(1);})();


自执行函数属于上述的“函数表达式”,规则相同

其他创建函数的方法

采用 eval , setTimeout , setInterval 等非常用方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  js