zoukankan      html  css  js  c++  java
  • 函数

      1 /*
      2     函数
      3 
      4     function name () {}
      5     var name = function () {} 匿名函数
      6     关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array
      7     arguments最常用于判断传入参数的个数
      8 */
      9     function foo(x) {
     10         console.log(arguments)
     11         for (var i = 0; i < arguments.length; i++) {
     12             console.log(arguments[i])
     13         }
     14     }
     15     foo(10, 20, 30)
     16 
     17     function ags () {
     18         if (arguments.length == 0) {
     19             return 0
     20         }
     21         var x = arguments[0]
     22         return x >= 0 ? console.log(x) : -x
     23         //三目运算符,相当于:
     24         // if (x>=0) {
     25         //     return x
     26         // }else{
     27         //     return -x
     28         // }
     29     }
     30     ags(10)
     31 
     32     function foo2(a, b, c) {
     33     if (arguments.length === 2) {
     34         // 实际拿到的参数是a和b,c为undefined
     35         c = b; // 把b赋给c
     36         b = null; // b变为默认值
     37     }
     38     // ...
     39 }
     40 
     41     /*
     42         rest参数
     43         rest参数只能写在最后,前面用...标识,从运行结果可知,传入的参数先绑定a、b,多余的参数以数组形式交给变量rest,所以,不再需要arguments我们就获取了全部参数。
     44 
     45         如果传入的参数连正常定义的参数都没填满,也不要紧,rest参数会接收一个空数组(注意不是undefined)。
     46     */
     47     function res (a, b, ...rest) {
     48         console.log(a)
     49         console.log(b)
     50         console.log(rest)
     51     }
     52 
     53     /*
     54         变量作用域
     55             全局作用域
     56                 不在任何函数内定义的变量就具有全局作用域。
     57                 JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性
     58 
     59                 全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。
     60 
     61                 减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中
     62 
     63             局部作用域
     64                 为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量
     65 
     66             常量
     67                 由于var和let申明的是变量,如果要申明一个常量,在ES6之前是不行的,我们通常用全部大写的变量来表示“这是一个常量,不要修改它的值”
     68                 ES6标准引入了新的关键字const来定义常量,const与let都具有块级作用域
     69     */
     70 
     71 
     72     /*
     73         方法
     74             在一个对象中绑定函数,称为这个对象的方法。
     75     */
     76     var xiaoming = {
     77         name : '小明',
     78         birth : 1997,
     79         age : function () {
     80             var y = new Date().getFullYear()
     81             //在一个方法内部,this是一个特殊变量,它始终指向当前对象
     82             return y-this.birth
     83         }
     84     }
     85     console.log(xiaoming.age)
     86     console.log(xiaoming.age())
     87 
     88     /*
     89         apply
     90             指定函数的this指向哪个对象,可以用函数本身的apply方法
     91             接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数
     92     */
     93 
     94     function getAge() {
     95         var y = new Date().getFullYear();
     96         return y - this.birth;
     97     }
     98 
     99     var xiaoming2 = {
    100         name: '小明',
    101         birth: 1990,
    102         age: getAge
    103     };
    104 
    105     xiaoming2.age(); // 25
    106     getAge.apply(xiaoming2, []); // 25, this指向xiaoming, 参数为空
    107 
    108     /*
    109         另一个与apply()类似的方法是call(),唯一区别是:
    110 
    111         apply()把参数打包成Array再传入;
    112 
    113         call()把参数按顺序传入。
    114     */
    115     Math.max.apply(null, [3, 5, 4]); // 5
    116     Math.max.call(null, 3, 5, 4); // 5
  • 相关阅读:
    【监控】一些关于应用级别监控的总结
    【监控】WebServer入库与缓存更新代码优化小计
    【监控】天机镜——优土大数据平台应用级别监控利器
    【监控】数据平台运营实战之如何打造应用级别的监控系统
    【分布式协调器】Paxos的工程实现-Cocklebur状态转移
    【分布式协调器】Paxos的工程实现-cocklebur选举
    【分布式协调器】Paxos的工程实现-cocklebur简介(二)
    【分布式协调器】Paxos的工程实现-cocklebur简介(一)
    【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法
    【基础】利用thrift实现一个非阻塞带有回调机制的客户端
  • 原文地址:https://www.cnblogs.com/tiantian9542/p/7278031.html
Copyright © 2011-2022 走看看