JS中创建函数的三种方式及区别


Posted in Javascript onMarch 13, 2016

1.函数声明

function sum1(n1,n2){
    return n1+n2;
  };

2.函数表达式,又叫函数字面量

var sum2=function(n1,n2){
    return n1+n2;
};

两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问;而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行。

自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,且立即自动执行。

(function(n1,n2){
    console.log (n1+n2)
})(1,3);//4

另外几种自执行函数:

//可用来传参
  (function(x,y){
    console.log(x+y);
  })(2,3);

  //带返回值
  var sum=(function(x,y){
    return x+y;
  })(2,3);
  console.log(sum);

  ~function(){
    var name='~'
    console.log(name);
  }();

  !function(){
    var name='!'
    console.log(name);
  }();

  ;(function(){
    var name=';'
    console.log(name);
  })();

  -function(){
    var name='-'
    console.log(name);
  }();

  //逗号运算符
  1,function(){
    var name=',';
    console.log(name);
  }();

  //异或
  1^function(){
    var name='^';
    console.log(name);
  }();

  //比较运算符
  1>function(){
    var name='>';
    console.log(name);
  }();

  ~+-!(function(){
    var name='~+-!';
    console.log(name);
  })();

  ~!(function(){
    var name='~!';
    console.log(name);
  })();

  (function(){
    var name='call';
    console.log(name);
  }).call();

  (function(){
    var name='apply';
    console.log(name);
  }).apply();

3.函数构造法,参数必须加引号

var sum3=new Function('n1','n2','return n1+n2');
console.log(sum3(2,3));//5

从技术角度讲,这是一个函数表达式。一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。

var name='haoxl';
  function fun(){
    var name='lili';
    return new Function('return name');//不能获取局部变量
  }
 console.log(fun()());//haoxl

 Function()构造函数每次执行时都会解析函数主体,并创建一个新的函数对象,所以当在一个循环或频繁执行的函数中调用Function()构造函数效率是非常低的。而函数字面量却不是每次遇到都会重新编译的,用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

Javascript 相关文章推荐
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
实现动画效果核心方式的js代码
Sep 27 Javascript
js匿名函数的调用示例(形式多种多样)
Aug 20 Javascript
javascript结合canvas实现图片旋转效果
May 03 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
Jan 15 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
详解nuxt路由鉴权(express模板)
Nov 21 Javascript
js实现图片放大并跟随鼠标移动特效
Jan 18 Javascript
浅谈js闭包理解
Apr 01 Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 #Javascript
Javascript数组Array方法解读
Mar 13 #Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 #Javascript
Javascript数组Array基础介绍
Mar 13 #Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 #Javascript
简单谈谈json跨域
Mar 13 #Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 #Javascript
You might like
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
第四章 php数学运算
2011/12/30 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
Python函数式编程实例详解
2020/01/17 Python
Python 如何创建一个线程池
2020/07/28 Python
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
介绍一下Linux中的链接
2016/05/28 面试题
师范生实习的个人自我鉴定
2013/10/20 职场文书
前台接待员岗位职责
2014/01/02 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
2015年助残日活动总结
2015/03/27 职场文书
整改通知书
2015/04/20 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python