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 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
Js实现手机发送验证码时按钮延迟操作
Jun 20 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
js style.display=block显示布局错乱问题的解决方法
Sep 21 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
JS设置随机出现2个数字的实例代码
Jul 19 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
Oct 11 Javascript
React通过父组件传递类名给子组件的实现方法
Nov 13 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
Dec 18 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
详解Javascript实践中的命令模式
May 05 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概述.
2006/10/09 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
老生常谈js数据类型
2017/08/03 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
基于python3生成标签云代码解析
2020/02/18 Python
Python 定义只读属性的实现方式
2020/03/05 Python
财务人员的自我评价范文
2014/03/03 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
给老婆的检讨书
2015/01/27 职场文书