javascript函数的3种定义方式
程序员文章站
2022-04-05 11:11:48
...
3种方式定义函数
1 function语句式
function test1(){
alert('我是test1');
}
test1();
2函数的直接量 ECMAScript
var test2 = function(){
alert('我是test2');
}
test2();
3function构造函数式
var test3 = new Function("a" , "b" ,"return a+b;");
alert(test3(10,20));
效率对比
var d1 = new Date();
var t1 = d1.getTime();
for(var i =0 ; i <100000;i++){
function test1(){;} //function语句的形式
//var test2 = new Function();
}
var d2 = new Date();
var t2 = d2.getTime();
alert(t2 -t1); <span style="font-family: Arial, Helvetica, sans-serif;"> </span>
var d1 = new Date();
var t1 = d1.getTime();
for(var i =0 ; i <100000;i++){
//function test1(){;} //function语句的形式
var test2 = new Function();
}
var d2 = new Date();
var t2 = d2.getTime();
alert(t2 -t1);
function test1(){;} 方式:输出2
var test2 = new Function(); 方式:输出69
解析顺序问题 对于function语句式的函数,javascript解析器会优先的解释
解析顺序问题 对于function语句式的函数,javascript解析器会优先的解释
表示变量声明了 但是没有被赋值
var test2 = function(){
alert('2222');
}
function f(){return 1;} // 函数1
alert(f()); //返回值为4 说明第1个函数被第4个函数覆盖
var f = new Function("return 2;"); // 函数2
alert(f()); //返回值为2 说明第4个函数被第2个函数覆盖
var f = function(){return 3;} // 函数3
alert(f()); //返回值为3 说明第2个函数被第3个函数覆盖
function f(){return 4;} // 函数4
alert(f()); //返回值为3 说明第4个函数被第3个函数覆盖
var f = new Function("return 5"); // 函数5
alert(f()); //返回值为5 说明第3个函数被第5个函数覆盖
var f = function(){return 6 ;} // 函数6
alert(f()); //返回值为6 说明第5个函数被第6个函数覆盖
输出顺序为:4、2、3、3、5、6
var k = 1 ;
function t1(){
var k = 2 ; //局部变量 k
function test(){return k ;} //function语句
<span style="white-space:pre"> </span>//var test = function(){ return k}; //函数直接量
//var test = new Function('return k;'); // 构造函数的方式
alert(test());
}
t1();
function test(){return k ;}
返回结果:2;
var test = function(){ return k};
返回结果:2;
var test = new Function('return k;'); 返回结果:1 ;
var test = new Function('return k;'); 返回结果:1 ;
原因:
var test = new Function('return k;');
构造方法方式具有*作用域,相当于如下代码:
var k = 1 ;
<span style="color:#ff6666;">var test = new Function('return k;'); // 构造函数的方式 </span>
function t1(){
var k = 2 ; //局部变量 k
//function test(){return k ;} //function语句
//var test = function(){ return k}; //函数直接量
//<span style="color:#ff6666;">var test = new Function('return k;');</span> // 构造函数的方式
alert(test());
}
t1();
function语句 |
function构造函数 | 函数直接量 | |
兼容 | 完全 | js1.1以上版本 | js1.2以上版本 |
形式 | 句子 | 表达式 | 表达式 |
名称 | 有名 | 匿名 | 匿名 |
性质 | 静态 | 动态 | 静态 |
解析时机 | 优先解析 | 顺序解析 | 顺序解析 |
作用域 | 具有函数的作用域 | *函数(*作用域) | 具有函数作用域 |
转载于:https://my.oschina.net/zjcx/blog/679579
上一篇: JavaScript调用函数的3种方式
下一篇: javascript调用函数的3种方式