<!DOCTYPE html>
<html>
<head>
<title>class11: 函数三种定义方式</title>
<script type="text/javascript">
// 1.function语句式
/* function test1() {
alert("方法一");
}
// 2.函数的直接量
var test2 = function() {
alert("2");
}
// 3.构造函数式
var test3 = new Function('a','b',"return a+b;");*/
// (1)效率比较
/* var d1 = new Date();
var t1 = d1.getTime();
for(var i = 0; i<1000000;i++) {
// function test() {;} //40+ms
//var test = new Function(); // 400+ms
}
var d2= new Date();
var t2=d2.getTime();
alert(t2-t1);*/
// 结论: 静态写入内存的方法效率高,动态销毁的方法时间长,效率低
// (2) 解析顺序问题
// 对于function语句式的函数,js解析器会优先解释;其他方法是顺序解析
/*test1();
function test1() {
alert("111");
}
test2();
var test2 = function() {
alert("222");
}*/
// 例子:
/* function f() { return 1; }
alert(f());// 返回值为4, 说明第1个函数被第4个函数覆盖
var f = new Function("return 2 ;");
alert(f());// 返回值为2,说明第4个函数被第2个函数覆盖
var f = function() {return 3;}
alert(f());// 返回值为3,说明第2个函数被第3个函数覆盖
function f() {return 4;}
alert(f());// 返回值为3,接下来都是顺序执行
var f = new Function("return 5;");
alert(f());
var f = function() {return 6;}
alert(f());*/
// 解果输出:4,2,3,3,5,6
// (3) 作用域的问题
// 方法一,方法二是局部作用域即函数作用域 方法三是全局作用域即顶级作用域
var k =1;
function t1() {
var k = 2;
/* function test() {return k;} // 2
var test = function() {return k;} // 2
var test = Function("return k;");*/ // 1
alert(test());
}
</script>
</head>
<body>
</body>
</html>
<html>
<head>
<title>class11: 函数三种定义方式</title>
<script type="text/javascript">
// 1.function语句式
/* function test1() {
alert("方法一");
}
// 2.函数的直接量
var test2 = function() {
alert("2");
}
// 3.构造函数式
var test3 = new Function('a','b',"return a+b;");*/
// (1)效率比较
/* var d1 = new Date();
var t1 = d1.getTime();
for(var i = 0; i<1000000;i++) {
// function test() {;} //40+ms
//var test = new Function(); // 400+ms
}
var d2= new Date();
var t2=d2.getTime();
alert(t2-t1);*/
// 结论: 静态写入内存的方法效率高,动态销毁的方法时间长,效率低
// (2) 解析顺序问题
// 对于function语句式的函数,js解析器会优先解释;其他方法是顺序解析
/*test1();
function test1() {
alert("111");
}
test2();
var test2 = function() {
alert("222");
}*/
// 例子:
/* function f() { return 1; }
alert(f());// 返回值为4, 说明第1个函数被第4个函数覆盖
var f = new Function("return 2 ;");
alert(f());// 返回值为2,说明第4个函数被第2个函数覆盖
var f = function() {return 3;}
alert(f());// 返回值为3,说明第2个函数被第3个函数覆盖
function f() {return 4;}
alert(f());// 返回值为3,接下来都是顺序执行
var f = new Function("return 5;");
alert(f());
var f = function() {return 6;}
alert(f());*/
// 解果输出:4,2,3,3,5,6
// (3) 作用域的问题
// 方法一,方法二是局部作用域即函数作用域 方法三是全局作用域即顶级作用域
var k =1;
function t1() {
var k = 2;
/* function test() {return k;} // 2
var test = function() {return k;} // 2
var test = Function("return k;");*/ // 1
alert(test());
}
</script>
</head>
<body>
</body>
</html>