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 相关文章推荐
jQuery ready函数滥用分析
Feb 16 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
jQuery基础知识小结
Dec 22 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
babel基本使用详解
Feb 17 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 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数据饼图效果实现代码
2011/11/23 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
php获取错误信息的方法
2015/07/17 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
js评分组件使用详解
2017/06/06 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
Python实现截屏的函数
2015/07/26 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
迅雷Cued工作心得体会
2014/01/27 职场文书
采购意向书范本
2014/03/31 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
教师自查自纠材料
2014/10/14 职场文书
《春酒》教学反思
2016/02/22 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python