JS函数

爱被打了一巴掌 2022-05-21 04:36 217阅读 0赞
  1. 函数是JS中的一等公民,平常JS的使用基本上都是和函数打交道。JS中的函数也可以看作是一个类(同时也是该类的构造器),函数本身也是一个对象,它是function的实例。

1:函数的定义

  1. JS是弱类型语言,不需要对参数、返回值进行类型的声明。
  2. 方式1:有函数名。
  3. function functionName(parameter-list){
  4. ....;
  5. }
  6. 方式2:匿名函数
  7. var f = function(parameter-list){
  8. ....;
  9. };
  10. 如上,定义了一个匿名函数,实际上就是定义了一个函数对象(即Function类的实例),然后把对象赋给了一个变量f

这种方式也是推荐使用的方式。

当然,方式1的定义也可以赋给一个变量,意味着原本的函数名不可用了。

  1. 方式3:使用Function类匿名函数
  2. var f = new Function(parameter-list,"函数执行体");
  3. 例:
  4. var a = new Function("name", "document.writeln("你好"+name);");

2:局部函数

如同JS的局部变量,局部函数只能在函数中进行访问。

3:函数、方法、对象、变量和类

函数在JS中不仅仅意味着函数,当使用JS定义一个函数时,可以理解为出现了以下这么多玩意:

  1. a:函数:这个不必说,也可以理解为Java中的方法。java中的方法需要对象或类来调用,这里的函数也是被调用(省略调用对象时,默认对象就是window)。
  2. b:对象:定义函数时,系统也会创建一个对象,该对象是Function类的实例。如下代码:
  3. var hello = function(name){
  4. return name+"你好";
  5. }
  6. alert((hello instanceof Function)+" "+
  7. (hello instanceof Object)); //会显示两个true;
  8. alert(hello); //会显示函数代码

c:方法:就像前面a说到的,定义函数时通常会附加给某个对象,作为对象的方法存在。默认对象就是window对象。调用函数时可以看作是方法调用,window对象可以省略。

d:变量:定义函数是,同时也会得到一个变量。比如:

  1. function hello (name) {
  2. return "fuck"+name;
  3. }
  4. hello = "12345"; //此处hello函数就被销毁了,被字符串变量覆盖了。
  5. e:类:定义函数时,也就是定义了一个同名的类,同时也是唯一的构造器。如下代码:
  6. var test = function(name){
  7. return "你好"+name;
  8. };
  9. var f1 = test("aaa"); //直接调用函数的话,得到的是函数的额返回值。
  10. var f2 = new test("bbb"); //通过new调用的话,得到的是函数的对象。

4:函数的属性和方法

  1. 既然函数可以看作为一个类,那么就可以有变量(属性)和方法。如下代码:
  2. function person(name, age){
  3. this.name = name;
  4. person.age = age;
  5. var bb = 0;
  6. this.info = function(){ //此处就是定义了一个方法。
  7. document.writeln("我的名字是:"+this.name");
  8. }
  9. }

当使用此函数(类)时,可以:

var p = new person(“aaa”,22);

p.info();

此时也就完成了方法调用。

这里的this关键字代表着实例属性和实例方法,而是用函数名作为前缀则是类属性和类方法(如同Java中的static关键字定义)。

函数中var定义的变量为局部变量。局部变量不能再函数外引用,这点就不用多说了。

5:通过call()方法和apply()方法调用函数

形式:函数引用.call(调用者,参数1,参数2);= 函数引用.apply(调用者,参数1,参数2); = 调用者.函数(参数1,参数2);

6:函数提升

  1. 只需要知道,使用函数名定义的函数,可以在定义之前调用。
  2. 而是用匿名定义的函数,则不能提前调用。
  3. 函数内的内部函数,如果赋值给不使用var声明的变量,则该变量就是一个全局变量,其代表的函数也成了全局函数。
  4. 如同JS的变量提升。能不用就不用。

7:箭头函数

  1. 如同Lambda表达式,是函数的简化写法。
  2. (param1,param2...) => \{ statements \}
  3. 如果函数体中只有一条return 语句,则允许省略花括号和return关键字。
  4. 如果参数列表中只有一个参数,则允许省略列表的圆括号。

8:函数的参数传递:

  1. 基本类型以及复合类型(数组,对象函数)的参数传递,都采用值传递方式,传入的都是参数的副本。只不过复合类型本身就是一个引用,传入的参数也是一个引用,它们指向同一个对象,因此函数内对复合类型参数的修改会影响函数外的复合类型。
  2. JS中,如果函数定义有参数,实际调用可以没有参数,因为系统会自动赋值为undefined。也就意味着,JS没有所谓的函数重载,因为即使定义函数声明了多个形参,调用时可以不用完全匹配。
  3. 函数唯一重要的是函数名。如果先后定义两个同名的函数,后面的会把前面的函数覆盖掉。

9:参数类型

  1. 由于是弱类型语言,函数的形参无需声明类型。这就会导致一些问题。如:
  2. function changeAge(p){
  3. p.setAge(20);
  4. }
  5. 这时调用时完全有可能传入的是其他类型的参数,就会导致错误。
  6. 所以,建议使用参数判断来进行操作。参数判断使用typeof或者instanceof。如下:
  7. function changeAge(p){
  8. if(typeof p == 'object' && tyoeof p == 'number'){
  9. 执行体...
  10. }else{
  11. 执行体...
  12. }
  13. }

发表评论

表情:
评论列表 (有 0 条评论,217人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js函数

    函数介绍 1. 什么是函数: 实现固定功能的代码块 函数是工具,是实现功能的工具 函数是通过其中的代码,来实现所谓的功能 2. 函数的特点:

    相关 JS 函数

    delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。 适用于当前或未来

    相关 JS函数

        函数是JS中的一等公民,平常JS的使用基本上都是和函数打交道。JS中的函数也可以看作是一个类(同时也是该类的构造器),函数本身也是一个对象,它是function的实例。

    相关 JS函数

    函数是JS中另一种符合类型,可以包含一段可执行的代码。也可以接收调用者传入参数。 作为弱类型语言,函数参数列表不需要声明数据类型,函数的返回值也不需要声明数据类型。 JS中

    相关 JS函数

    JS函数 一、 什么是函数 二、函数创建写法 1.自定义函数 2.函数表达式(又叫匿名函数) 3.利用函数的构造函数创