JS中创建函数的三种方式及区别
来源: 阅读:504 次 日期:2016-07-20 15:39:20
温馨提示: 小编为您整理了“JS中创建函数的三种方式及区别”,方便广大网友查阅!

这篇文章主要介绍了js函数的多种定义方法与其区别,非常的详细,有需要的小伙伴可以参考下

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()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map