js function myfun(){} var myfun =function(){} 區別

函數的幾種定義方式:

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了 ,你可以試試

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。