// 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