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 相关文章推荐
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
JQUERY表单暂存功能插件分享
Feb 23 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
Apr 17 Javascript
基于jQuery的checkbox全选问题分析
Nov 18 Javascript
详解webpack解惑:require的五种用法
Jun 09 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
JavaScript中的"=、==、==="区别讲解
Jan 22 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
Aug 27 Javascript
vue 授权获取微信openId操作
Nov 13 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
2019十大人气国漫
2020/03/13 国漫
php模板之Phpbean的目录结构
2008/01/10 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
JS 自定义带默认值的函数
2011/07/21 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
python 中的int()函数怎么用
2017/10/17 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python递归函数用法详解
2020/10/26 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
AJAX都有哪些有点和缺点
2012/11/03 面试题
《草虫的村落》教学反思
2014/02/16 职场文书
军训拉歌口号
2014/06/13 职场文书
购房委托书
2014/10/15 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
安全承诺书格式范本
2015/04/28 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android