函數的幾種定義方式:
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了 ,你可以試試