<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();//我是test1
function 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 6s
function f(){return 1;}//函数1
alert(f());//返回值为4,说明第一个函数被第四个函数覆盖
var f=new Function("return 2;");//函数2
alert(f());//返回值为2,说明第四个函数被第二个函数覆盖
var f=function(){return 3;}
alert(f());//返回值为3,说明第二个函数被第三个函数覆盖
function f(){return 4;}//函数4
alert(f());//返回值为3,说明第四个函数被第san个函数覆盖
var f=new Function("return 5;");//函数5
alert(f());//返回值为5,说明第三个函数被第五个函数覆盖
var f=function(){return 6;}//函数6
alert(f());//返回值为6,说明第五个函数被第六个函数覆盖
*/
//作用域的概念
var k=1;
function t1(){
var k=2;
//function test(){return k;}//function语句 2
var test=function(){return k;}//函数直接量 2
//var test=new Function('return k;');//构造函数式 1顶级作用域,相当于在t1方法外面定义的函数。
alert(test());
}
t1();
</script>
</head>
<body>
</body>
</html>
js中三种函数的效率、解析顺序、作用域问题解决
最新推荐文章于 2022-01-21 11:26:37 发布