javascript函数定义三种方式详解
2017-12-13 11:22
260 查看
定义函数的三种方式
function语句式function test1() { console.info("test1"); }
函数的直接变量 ECMAScript
var test2 = function () { console.info("test2"); };
function构造函数式
var test3 = new Function("a","b","return a+b;"); console.info(test3(10,20));
解析顺序
对于function语句式这种方式,js解析器会优先解释,对于另外两种方式,仅仅是申明了(如果返回会是undefined),当函数体被执行的时候才会被正真地赋值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个函数覆盖
效率对比
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语句的形式只会编译一次然后放到内存中供其他地方的再次使用,而使用构造函数的方式会每次都创建function对象,虽然随之会被销毁,但是在这里会使效率大幅降低
函数作用域
var k = 1 ; function t1(){ var k = 2 ; //局部变量 k //function test(){return k ;} //function语句 2 //var test = function(){ return k}; //函数直接量 2 //var test = new Function('return k;'); // 构造函数的方式 1 alert(test()); } t1();
对于function语句和函数直接量两种方式变量是具有函数的作用域,而Function构造函数的方式具有的是顶级函数的作用域
相关文章推荐
- javascript函数的三种定义方式及区别
- JavaScript函数笔记-函数定义的三种方式
- JavaScript函数定义的三种方式及其调用
- python selenium 三种等待方式详解
- js 函数定义三种方式
- PHP字符串三种定义方式
- 详解java倒计时三种简单实现方式
- 结构体定义的三种方式
- jquery绑定事件的三种方式详解
- 三种缓存方式的详解
- 指针易混淆的定义方式详解
- JS定义和直接使用匿名函数的三种实现方式
- 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
- Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)
- Spring 3.x中三种Bean配置方式比较详解
- 基于JavaScript 声明全局变量的三种方式详解
- 函数定义的三种方式
- JavaScript定义函数的三种方式
- 详解Android解析Xml的三种方式——DOM、SAX以及XMLpull
- SSO单点登录三种情况的实现方式详解