函数的几种定义方式:
myfun:function(){}
myfun = function(){}
function myfun(){}
var myfun =function(){}
myfun.prototype.myfunPro = function (){}
这几种方法每一个都有不一样的作用。
1.myfun:function(){} 这个是必须写在对象内部的,这是一个对象的方法,如
vara = {
myfun:function(){}
}
写在外面会报错。
2.任何时候都不要这样写myfun = function(){},这样写就变成了全局对象window的一个属性,要记得加上var ,第四种方式是对的,如下:
varmyfun = function(){}
这是一种声明函数的方式,左边是一个变量,右边是一个函数的表达式,意思就是把一个匿名的函数表达式复制给了变量myfun,只是声明了一个变量指向了一个函数对象。这个和第三种方法function myfun(){}声明的方法差别不大,但还是有差别的。
这就要涉及到javascript解析的部分了,简单来说,js在解析的过程中,会先把函数和变量提前解析。
function myfun(){}这种声明方法会把函数整个语句显示的提前到了脚本或者函数前(当前作用域),函数名和函数均会被提前(会在执行上下文代码前声明)。
而var myfun = function(){}这种声明方法,只是提前了一个变量,并没有提前函数体。
3.最后一种并不是声明的函数,只是在myfun函数上的原始对象上加了一个myfunPro方法,构造函数中用到的。给你个例子:
varmyfun = function(){
this.a = "a";
}
myfun.prototype.myfunPro = function(){
alert("0")
}
vartest = newmyfun();
console.log(test);
运行结果如下图:
这时候如果你在最底部加上一段代码,如下:
varmyfun = function(){
this.a = "a";
}
myfun.prototype.myfunPro = function(){
alert("0")
}
vartest = newmyfun();
console.log(test);
test.myfunPro();
这时候就会弹出一个对话框 0了 ,你可以试试