博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript函数定义三种方式详解
阅读量:4290 次
发布时间:2019-05-27

本文共 1472 字,大约阅读时间需要 4 分钟。

定义函数的三种方式

  • 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构造函数的方式具有的是顶级函数的作用域

转载地址:http://vhrgi.baihongyu.com/

你可能感兴趣的文章
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>