Js函数的三种创建四种调用

Posted 笠航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Js函数的三种创建四种调用相关的知识,希望对你有一定的参考价值。

 1 // 函数的三种创建方法
 2 function one(){   // 函数声明,不属于任何对象,始终默认为全局对象
 3 console.log("第一个函数")
 4 //默认有一个return this,返回函数中的内容
 5 }
 6 one();      //必须调用;可以在函数声明前调用(预处理变异机制)                       
 7 
 8 var fn=function(){                  //函数表达式
 9 console.log("第二个函数")
10 }
11 fn(); //必须先声明再调用                                 
12 
13 var fun=new Function(console.log("第三个函数")); //构造函数 无需调用,会自调
 1 // 函数的4种调用方式
 2 function one(){                     
 3 console.log("一个函数")
 4 }
 5 one();  //作为一个函数去调用
 6 
 7 
 8 var person={
 9 name:"tom",
10 age:18,
11 speak:function(){
12 console.log("English")
13 }
14 }                   
15 person.speak(); //函数作为对象的方法的调用
16 
17 
18 function num(n1,n2){
19 this.number1=n1;
20 this.number2=n2;// 构造函数中的this没有任何值
21 }
22 
23  var i=new num(3,5);
24  console.log(i.number1) // 构造函数会创建一个新的对象,新的对象会继承构造函数的属性和方法
25 
26 
27  function myFunction(a,b){
28  return a+b;
29  }
30  myFunction.call(this,2,5);
31 
32  var myArry=[2,5];
33  myFunction.apply(this,myArry); //作为函数方法调用函数 call()和apply()是预定义的函数方法,apply传入的是一个数组,call传入的是参数

js的运行机制问题:(声明提升) 
1、在js中js引擎会优先解析var变量和function定义!在预解析完成后从上到下逐步进行! 
2、解析var变量时,会把值存储在“执行环境”中,而不会去赋值,值是存储作用!例如: 
alert(a); var a = 2; 这时会输出undifiend,意思是没有被初始化没有被赋值! 
这并不是没有被定义,错误了的意思! 
3、在解析function时会把函数整体定义,这也就解释了为什么在function定义函数时为什么可以先调用后声明了!其实表面上看是先调用了,其实在内部机制中第一步实行的是把以function方式定义的函数先声明了(预处理)

以上是关于Js函数的三种创建四种调用的主要内容,如果未能解决你的问题,请参考以下文章

让js中的函数只有一次有效调用的三种常用方法

C++中的奇淫技巧,三种函数调用方法,让小白彻底理解其工作原理

js中this指向的三种情况

JS事件的三种方式

Unity3D中三种调用其他脚本函数的方法

JS 对象的三种创建方式