js中三种函数的效率、解析顺序、作用域问题解决

来源:互联网 发布:淘宝好口碑女装店铺 编辑:程序博客网 时间:2024/06/07 06:12
<html><head><title>010</title><script type="text/javascript" charset="utf-8">//函数一共有三种定义方式/*//1  function语句式  静态的function test1(){alert('我是test1');}//执行的话,test1();//2 函数的直接量 ECMAScript推荐的一种方式  动态的var test2=function(){alert('我是test2');}//执行的话,test2();//3 function构造函数式,该种方式不常用,但是也可以记住  静态的var test3=new Function("a","b","return a+b");//alert(test3(10,20));//30*/////////////////比较function语句式创建和function构造函数式效率比较/*var d1=new Date();var t1=d1.getTime();for(var i=0;i<10000;i++){//function test1(){;}//它只创建一次,静态的,效率高,占用内存var test2 = new Function();//每一次都要创建一次,效率低不占内存}//定义一个空函数,只要在函数作用域中加上一个大括号就可以了。//如果你只希望创建一次可以用那种动态的创建函数。var d2=new Date();var t2=d2.getTime();alert(t2-t1);//7  6  5  3  4  4  4毫秒//19  13  16  13  14  11  13毫秒*/////////////////函数解析顺序的问题 对于function语句式的函数,javascript解析器会优先的解释。/*test1();//我是test1function test1(){//提前解析alert('我是test1');//test1相当于在windows下面的全局变量}//test2();//什么都没有alert(test2);//undefined,表示变量声明了但是并没有赋值.alert(test3);//这里我并没有声明变量test3,所以什么都没有显示.var test2=function(){alert('我是test2');//test2也相当于在windows下面的全局变量,但是只是先执行了,只有看到function是才会赋值。}*//*//函数解析顺序。//4 2 3 3 5 6sfunction f(){return 1;}//函数1alert(f());//返回值为4,说明第一个函数被第四个函数覆盖var f=new Function("return 2;");//函数2alert(f());//返回值为2,说明第四个函数被第二个函数覆盖var f=function(){return 3;}alert(f());//返回值为3,说明第二个函数被第三个函数覆盖function f(){return 4;}//函数4alert(f());//返回值为3,说明第四个函数被第san个函数覆盖var f=new Function("return 5;");//函数5alert(f());//返回值为5,说明第三个函数被第五个函数覆盖var f=function(){return 6;}//函数6alert(f());//返回值为6,说明第五个函数被第六个函数覆盖*///作用域的概念var k=1;function t1(){var k=2;//function test(){return k;}//function语句   2var test=function(){return k;}//函数直接量    2//var test=new Function('return k;');//构造函数式   1顶级作用域,相当于在t1方法外面定义的函数。alert(test());}t1();</script></head><body></body></html>

原创粉丝点击