JS的三种函数声明

来源:互联网 发布:java空指针异常 编辑:程序博客网 时间:2024/06/04 01:18
js有3种方法进行函数声明。
1、function语句类型函数声明
function test1(){}
函数的调用方式:test1();
2、函数的直接量形式
var test2 = function(){}
函数的调用方式:test2();
3、构造函数式
var test3 = new Function("a","b","return a+b;");
函数的调用方式:test3(10,20);
3种函数声明方式比较:
 首先从性质上来说明:第一种和第二种都属于静态,第三种属于动态
其次从解析顺序上说明:第一种优先解析,第二种和第三种都属于顺序解析,为了更好的说明,做如下的测试。
//探测三种函数声明的解析顺序 
 function f(){return 1;} 
 alert(f()); 
 var f = new Function("return 2;"); 
 alert(f()); 
 var f = function(){return 3;} 
 alert(f()); 
 function f(){return 4;} //标记1
 alert(f());  //标记2
 var f = new Function("return 5;"); 
 alert(f()); 
 var f = function(){return 6;} 
 alert(f());
也许你会认为执行以上函数之后,输出的结果为1,2,3,4,5,6,事实上,结果的执行顺序为4,2,3,3,5,6,怎么样,很吃惊吧,让我来给阁下解释一下。
function语句类型函数声明优先解析,当页面加载之后,js解析器会首先解析该函数,语句型f函数共两个,首先return 1,而后再解析另一个语句型函数f,由于js中没有重载,所以第二个f函数会覆盖第一个return 4,因此,在alert的时候先输出4,其他的函数都是顺序执行,故顺序输出,2,3,当函数执行到标记1的时候,发现页面加载时该函数已解析,故不再解析,所以执行标记2的时候,f函数依然是上一次解析的f函数,故输出3,接着再顺序执行,因此最后的输出结果为:4,2,3,3,5,6.
若还有不明白的地方,欢迎大家留言!
原创粉丝点击