SOURCE

// sort函数的内部实现方式

// es5函数内部属性, arguments和this
// arguments是一个类数组对象,里面保存着函数的所有参数,同时还有一个额外的属性callee,
// callee指向了拥有这个arguments对象的函数,即指向函数自身;

function factorial(num){
    if(num < 1){
        return 1
    }else{
        return num * arguments.callee(num-1)
    }
}

// this 引用的是函数执行的环境对象
window.color = 'red'
function sayColor(){
    return this.color
}
sayColor() // red

var o = { color:'blue' }
o.sayColor = sayColor
o.sayColor() // blue

// 值得注意的是,函数的名字仅仅是一个包含指针的变量而已; 在上述例子中,sayColor和o.sayColor
// 仍然指向的是同一个函数,只不过执行环境不同,执行中的this指向不同;


// 函数的属性和方法
// 函数是对象,所以函数也拥有属性和方法

// length属性 表示函数希望接收的命名参数的个数
// prototype属性 

// 每个函数都包含两个非继承而来的属性,apply 和 call

// 在严格模式下,未指定环境对象而调用函数,this值不会转型为window,除非明确把函数添加到某个
// 对象或者调用apply和call,否则this的值将是undefined


// bind方法

// 每个函数继承的toLocaleString()和toString()方法都始终返回函数的代码,继承的valueOf()方法也同样
// 只返回函数代码
console 命令行工具 X clear

                    
>
console