Javascript权威指南(函数)

时间:2020-05-18
本文章向大家介绍Javascript权威指南(函数),主要包括Javascript权威指南(函数)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

任何函数只要作为方法调用实际上都会传入一个隐式的实参,这个实参是一个对象,方法调用的母体就是这个对象。

函数的参数(实参和形参)

1、可选参数

当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined

function getPropertyName(o, /*optional*/a) {
    if(!a) a = []   //  相当于a = a || []
    for(var property in o)
        a.push(property)
    return a  
}
var a = getPropertyName(o) //将o的属性存储到一个新数组中
get PropertyNames(p, a)      //将p的属性追加至数组a中

2、可变长的实参列表:实参对象(不定实参函数)

在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象,这样可以通过数字下标就能访问传入函数的实参值,而不是非要通过名字来得到实参,arguments有个length属性

实参对象的个数获取

function f(x, y, z) {
    if(arguments.lenght != 3) {
        //抛出异常,并做异常的处理
    }
    //再执行函数的其他逻辑
}

3、callee和caller属性

callee属性在某些时候会非常有用,比如在匿名函数中通过callee来递归地调用自身

var factoral = function(x)  {
   if(x  <= 1) return 1
   return x * arguments.callee(--x)  
}

4、闭包

关于闭包的理解

function counter() {
    var n = 0
    return {
        count: function() {return n++}
        reset: function() {n = 0}
    }      
}
//以下c和d是不会互相影响的
var c = counter(), d = counter()
c.count()    // =>0
d.count()   // => 0
c.reset()   //  reset()和count()共享状态
c.count()   // =>0 因为c被重置了
d.count()  //  =>1 d没有被重置,所以d的count结果还是1

5、函数属性、方法和构造函数

1、length属性

2、prototype属性

3、call()方法和apply()方法

apply()方法和call()类似,但是传入实参的形式和call()有所不同,它的实参都放入一个数组中

function trace(o, m) {
   var original = o[m]
   o[m] = function() {
         console.log(new Date() , "Entering", m)
         var result = original.apply(this,  arguments)
         console.log(new Date(), "Exiting", m)
         return result
   }  
}

4、bind()方法

5、toString()方法

6、可调用的对象

6、函数式编程

可以使用方法map()和reduce()来实现数组的计算

var sum = function(x, y) {return x + y}
var  square = function(x){return x * x}
var data = [1,1,3,5,5]
var  mean = data.reduce(sum)/data.length
var deviations = data.map(function(x) {return x - mean})
var stddev = Math.sqrt(deviations.map(square).reduce(sum)/(data.length - 1))

7、高阶函数

所谓高阶函数,就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数

function not (f) {
        return function() {
            var result = f.apply(this,arguments)
            return !result
       }  
}
var even = function(x) {
     return x % 2 === 0
}
var odd = not(even)
[1,1,3,5,5].every(odd) ;        //true ,  每个元素都是奇数

 

原文地址:https://www.cnblogs.com/jun-web/p/function.html