javascript-js 函数感悟浅谈
版权声明:欢迎转载,但请注明出处
最近学习js的时候一直摸不着头脑,因为它和我以前接触过的高级语言太不一样,这是我第一门接触的脚本语言,今天我想简单的说一下js 里的函数。
如果我写的有什么不对的地方,请拿起板砖拍死我,并指明不对的地方,学习就要改进。
废话不闲扯,js里的函数太不一样,太特别,因为可以说它既是类又是函数,要知道,在java里这两个的关系是完全不可能划上等号的,可是它在js里就可以!
下面看一段代码
首先声明一个func函数,我们这里用字面量的方式声明一个func函数
var func = function(){
alert("hello world");
};
值得注意的是,这里的function(){}是一个匿名函数,而前面的var func=… 只是声明了一个变量并把这个变量指向了这个匿名函数,我想说的是这个这种形式可以比作是java 里的函数的引用,你也可以看作是C语言里的指针. func在栈上,指向了堆中 我们声明的函数的那块内存。
而我们声明的函数(我们后面就称为func函数),其实在声明的时候,js也自动为它匹配了一个对象,就是它本身,这个可能听起来有点绕口,也就是说我们创建func的同时,我们也得到了一个func的对象,那现在的func函数就可以看作也是一个类。没听懂没关系,我们下面看一段简短的代码
//声明一个变量
var a = new func();
我们声明了一个变量,这个变量又指向了new func(); 大家大概知道这是什么意思了吧,意思是a 就是func类的实例。而func这个函数就是它自己的构造器。不明白什么叫构造器的 找下度娘吧.
在js里 类和函数基本上是相辅相成的,所以 现在的a 既是Obejct的实例,也是Function的实例
如何得到这个结果呢,我们可以通过关键字instanceof来检验
if(a instanceof Object){
alert("a是Object的实例");
}
if(a instanceof Function){
alert("a是Function的实例");
}
为了增强js,js内部集成了很多已经写好的类,就包括前面讲的Function 和 Object
我们不能说js是面向对象的语言,但是可以说js是基于类的语言
另外js 还提供了三种声明函数的方法
//第一种
function func(){
//
}
//第二种
var func = function(){
//
};
//第三种
var func = new Function(value1,value2,);
//注意:第三个参数要放上你的函数体
13
通常不建议第三种做法,因为第三种做法是动态的,如果执行次数多的话,他会生成很多个对象,占掉很多的内存,很可能导致OutOfMemory,并且它的作用域是顶级作用域,也就是window,很多时候,用第三种容易发生不可估量的错误
而第一种和第二种都是把生成的对象放在一块内存里,引用去指向它,而不会重复的创建。

浙公网安备 33010602011771号