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

javascript创建函数的三种方式

2015-05-14 11:57 288 查看
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" charset="UTF-8">

/**
* 函数的3种创建方法
*/
//1、语句式
function test(a,b){
return a+b;
}
console.log(test(1,2));

//2、直接量式
var test1 = function(a,b){
return a+b;
}
console.log(test1(3,4));

//3、构造函数式

var test2 = new Function('a','b','return a+b;');
console.log(test2(2,4));

/**
* 三种方式的解析顺序
*/

test3();
function test3(){
console.log('我是test3,语句式创建的');
}

//test4(); //出错,因为test4只是被声明为全局变量,可是还没有赋值
var test4 = function(){
console.log('我是test4,直接量方式创建的');
}
test4();
// test5(); //出错,因为test5只是被声明为全局变量,可是还没有赋值
var test5 = new Function("console.log('我是test5 ,构造函数式创建的')");//解析顺序和直接量方式一样(顺序解析)
test5();

/**
*  三种方式的效率
*/

var d1 = new Date();
var t1 = d1.getTime();
for(var i=0;i<100000;i++){
// function test6(){;};// 语句式其次
// var test7 = function(){;};//直接量式最快
//var test8 = new Function();// 构造函数式最慢
}
var d2 = new Date();
var t2 = d2.getTime();
console.log(t2-t1);

/**
* 三种方式的作用域
*/
var k=1;//当这里的k注释掉时,构造函数式会报错找不到k
function t1(){
var k=2;
//function demo(){console.log(k);};// 2
//var demo = function(){console.log(k)};// 2
var demo = new Function('console.log(k)');// 1   构造函数式 定义的函数相当于全局,看不见函数内的k,(顶级作用域)
demo();
}
t1();

</script>

</head>
<body>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: