JavaScript创建函数的三种方式

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

1.函数声明

1

2

3

function sum1(n1,n2){

    return n1+n2;

  };

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


1

2

3

var sum2=function(n1,n2){

    return n1+n2;

};

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

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

1

2

3

(function(n1,n2){

    console.log (n1+n2)

})(1,3);//4

另外几种自执行函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

//可用来传参

(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.函数构造法,参数必须加引号

1

2

var sum3=new Function('n1','n2','return n1+n2');

console.log(sum3(2,3));//5

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

1

2

3

4

5

6

var name='haoxl';

  function fun(){

    var name='lili';

    return new Function('return name');//不能获取局部变量

  }

 console.log(fun()());//haoxl

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

内容转载至:http://www.jb51.net/article/80861.htm



本文转自    风雨萧条 博客,原文链接:    http://blog.51cto.com/1095221645/1870031    如需转载请自行联系原作者

相关文章
|
6月前
|
存储 JavaScript 前端开发
探索JavaScript对象的奇妙世界:掌握JavaScript对象的多种创建方式!
探索JavaScript对象的奇妙世界:掌握JavaScript对象的多种创建方式!
|
6月前
|
前端开发 JavaScript Java
前端(JavaScript)------函数与对象
前端(JavaScript)------函数与对象
71 0
|
6月前
|
前端开发 JavaScript
JavaScript创建多个对象的方法
JavaScript创建多个对象的方法
57 1
|
JavaScript 前端开发
|
JavaScript 前端开发
|
JavaScript 前端开发
创建 JavaScript 对象
创建 JavaScript 对象
103 0
|
存储 数据采集 JSON
JavaScript基础③
JavaScript基础③
114 0
|
JavaScript 前端开发
JavaScript对象的注意事项
JavaScript对象的注意事项 前面讲到了JavaScript对象的简单解析,现在来说一下JavaScript对象实际应用时的注意事项。 1.对象可以嵌套对象 var name="蒋庆"; var obj={};//对象 var person={ // name:"马松昊", name:name, age:22, sex:"女", age:18, boyfriend:{ name:"沈春阳", age:23,
|
前端开发 JavaScript Java
前端(JavaScript)------函数与对象(下)
函数是⼀段可以反复调⽤的代码块。函数还能接受输⼊的参数,不同的参数会返回不同的值。
91 0
|
前端开发 JavaScript
前端(JavaScript)------函数与对象(上)
函数是⼀段可以反复调⽤的代码块。函数还能接受输⼊的参数,不同的参数会返回不同的值
89 0