zoukankan      html  css  js  c++  java
  • js学习(五)--函数function()、for...in、函数中的方法,arguments

    1.函数的简介

    函数也是一个对象
    函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)
    使用typeof检查一个函数对象时,会返回function

    var fun = new Function();
    
    
    • 调用函数语法
      函数对象()
      fun();
      当调用函数时,函数中封装的代码会按照顺序执行

    很少使用构造函数的方式来创建一个对象

    使用函数声明来创建一个函数

    语法:

    function 函数名([形参1,形参2。。。形参N]){
          语句...
    }
    
    function fun2(){     //匿名函数
    
    }
    
    在函数内部还可以声明函数
    function fun3(){
          function fun4(){
                alert("我是fun4");
          }
          return fun4();
    }
    

    使用函数表达式来创建一个函数

    var 函数名 = function([形参1,形参2,...形参N]){
          语句。。。
    };
    
    var fun3 = function(){
          console.log(“****”);
    };
    
    fun3() 调用函数
    fun3 函数对象
    

    2.函数的参数

    可以在函数的()中来指定一个或多个形参
    函数的实参可以是任意数据类型
    实参可以是对象,也可以是一个函数

    function sum(a,b){
          console.log(a+b);
    } 
    

    调用函数时解析器不会检查实参的类型
    所以要注意是否有可能会接受到非法的参数,如果有可能则需要对参数进行类型检查

    调用函数时,解析器也不会检查实参的数量,多余的实参不会被赋值
    如果实参的数量少于形参的数量,这没有对应实参的形参将是undefined

    3.函数的返回值

    使用return来设置函数的返回值

    语法: return 值
    return 后的值将会作为函数的执行结果返回
    

    返回值的类型

    返回值可以是任意的数据类型,也可以是一个对象,函数

    将fun4函数对象作为返回值返回
    function fun3(){
          function fun4(){
                alert("我是fun4");
          }
          return fun4();
    }
    

    4.立即执行函数

    函数定义完后立即执行,并只被调用一次
    (function(){
          alert("我是一个服务函数");
    })();
    
    (function(a,b){
          console.log("a = "+a);
          console.log("b = "+b);
    })(123,456);
    

    5.方法

    var obj = new Object();
    
    obj.name = "孙悟空";
    obj.name = 18;
    
    obj.sayName = function(){
          console.log(obj.name);
    };
    obj.sayName();
    

    对象的属性也可以是函数
    如果一个函数作为一个对象的属性保存
    那么我们称这个函数是这个对象的方法
    调用函数就说调用这个对象的方法

    方法和函数只是名称上的区别没有其他的区别

    调方法
    obj.sayName();
    调函数
    fun();
    

    6.枚举对象中的属性

    for ... in 语句 ==类似于java的for each==
    
    for(var 变量 in 对象){
    
    }
    
    for(var n in obj){
          console.log("属性名:"+n);
          console.log(“属性值:”+obj[n]);
    }
    

    关于取值的地方和java还是不一样的

    7.函数中的方法 (P79)

    call()和apply()
    都是函数对象的方法,需要通过函数对象来调用
    当对函数调用call()和apply()都会调用函数执行
    fun.apply();
    fun.call();
    fun();
    这三个效果其实是一样的

    • 在调用call和apply()可以将一个对象指定为第一个参数,这个对象将会成为函数执行时的this
      fun()的this是window
      call()和apply()指定是哪个对象就是哪个对象为this
      fun.call(obj);

    • call()方法可以将实参在对象之后依次传递
      fun.call(obj,2,3);

    • apply()方法需要将实参封装到一个数组中统一传递
      fun.apply(obj,[2,3]);

    this的情况
    1.以函数形式调用时,this永远都是window
    2.以方法的形式调用时,this是调用用方法的对象
    3.以构造函数的形式调用时,this是新创建的那个对象
    4.使用call和apply调用时,this是指定的那个对象

    8、arguments(P80)

    在调用函数时,浏览器每次都会传递进两个隐含的参数
    1.函数的上下文对象this
    2.封装实参的对象arguments

    • arguments是一个类数组对象,它可以通过索引来操作数据,也可以获取长度
    • 在调用函数是,我们所传递的实参都会在arguments中保存
    function fun(){
          console.log(arguments.length);
    }
    arguments.length就是实参的个数
    arguments[0];可以将参数取出
    

    arguments的属性callee

    这个属性对应的函数对象,就是当前正在指向的函数对象

    function fun(){
          console.log(arguments.callee == fun);//true
    }
    
  • 相关阅读:
    多线程程序设计学习(10)Future pattern
    Stack编程队列
    JS操作JSON总结
    java并发之TimeUnit理解
    java并发之DelayQueue实际运用示例
    netty的编解码器理解(转)
    spring中@Resource和@Autowired理解
    Netty中解码基于分隔符的协议和基于长度的协议
    构建基于Netty 的HTTP/HTTPS 应用程序
    对于spring中事务@Transactional注解的理解
  • 原文地址:https://www.cnblogs.com/psyduck/p/14193656.html
Copyright © 2011-2022 走看看