函数名想象成指针,有助于理解为什么ECMAScript为什么没有函数重载的概念
重载:重新全部的加载
废话不多说直接列子
function add(num){
return num+100
}
function add(num){
return num+200
}
add(100) //300
有人会说最后一个函数覆盖了第一个 这样说似乎也是对的 。 但是其实是最后一个函数add函数名字覆盖的指针覆盖了第一个 记住函数名师指针 指向函数函数声明就相当于开辟了一个内存空间JS不允许访问内存的所以只是一个指针
其实这个样理解
var add=function(num){
return num+100}
var add=function(num){
return num+200}
第二个add这个函数名字覆盖的第一个add他们是指针指针指针 并没有改变函数
以上纯属自己理解如有错误请指出
所以说JS没有函数重载只会模拟函数重载
函数的内部属性
二个特殊的属性:argument 和this
arguments是一个类数组为什么是类数组 他是一个数组但是也有函数里面的一些指针
作用:主要用途是保存函数的参数 (实参)
他的属性:
callee 是一个指向拥有argument函数本身的一个指针(在递归 阶乘中使用解决函数名的耦合性)
this:不多介绍 函数最终被谁调用一般都指向谁(一般用在构造函数中使用)
属性和方法
万物皆对象 函数也不例外所以也有自己的属性和方法
二个属性方法
length 形参的长度
prototype 保存函数实例方法的真正所在 (这个很重要的一个属性对于继承来说)es5中这个属性不能枚举(枚举就是for in遍历)
apply/call 这两个都是在特定的作用域调用函数(设置函数体中this对象值一般用于继承)
小东西
自己试验 新建一个add函数 控制台打印add 然后在打印add.prototype
在打印add.prototype.constructor 然后在add.prototype.constructor.prototype 大概知道了吧 你可以无限点下去 无限循环下去 这个就是指针 是不是感觉懂了!!!
另外这个proto有指向这个函数的prototype属性你可以如上面的方法打印一下一个无限的指向