真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Javascript鏈?zhǔn)阶饔糜蛟敿?xì)介紹

 Javascript 鏈?zhǔn)阶饔糜?/strong>

十年的薩迦網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整薩迦建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“薩迦網(wǎng)站設(shè)計(jì)”,“薩迦網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

其實(shí)對于Javascript鏈?zhǔn)阶饔糜虻拿枋?,包括,JS權(quán)威指南,都有些太冗長了--但是很準(zhǔn)確:JavaScript中的函數(shù)運(yùn)行在他們被定義的作用域里,而不是他們被執(zhí)行的作用域里。

這句話有點(diǎn)難懂,但程序的設(shè)計(jì),基本都是為了簡單,便于理解的。記住JS中經(jīng)典的一句話是,一切皆對象。

說白了鏈?zhǔn)阶饔糜颍鋵?shí)就是Javascript的一個特性:子函數(shù)中可以訪問父函數(shù)的所有變量。當(dāng)然也包括全局變量window(一般的函數(shù)定義function a(){},其實(shí)都是window對象的子函數(shù))。另外補(bǔ)充一下,函數(shù)定義有兩種方式,其實(shí)略有差別:

var a=function(){}和function a(){},

稍后再解釋他們的區(qū)別。

所以,我們看Crockford的<>中就提到,要在一個函數(shù)中定義變量,要養(yǎng)成良好的習(xí)慣,請直接在函數(shù)開頭定義變量。JS中這點(diǎn)上有別于其它語言的要求----盡量推遲變量定義(使用前定義)。

我們看一下laruence提供的例子:

var name = 'laruence';
functionecho(){
   alert(name);
   var name = 'eve';
   alert(name);
   alert(age);
}
 
echo();

這個例子其實(shí)很有迷惑性(會讓人錯誤的以為,輸出結(jié)果是:laruence,eve,error;其實(shí)結(jié)果是:undefined,eve,error),關(guān)鍵就是因?yàn)閑cho()函數(shù)中定義的var name='eve'。但其實(shí)換個寫法,這個例子就很清楚了:

var name = 'laruence';
function echo() {
   var name;
   alert(name);
   name = 'eve';
   alert(name);
   alert(age);
}
 
echo();

其實(shí),上面的函數(shù)在JS引擎解析的時(shí)候,就會被解析成這樣。如果你是初學(xué)者,其實(shí)這樣理解就可以了。但如果你有別的程序的編程經(jīng)驗(yàn),例如java。就很容易被慣用思維給套住了,PS:本人就是給套住的一個。所以,還是按照Crockford的建議把,定義變量,請?jiān)诤瘮?shù)頂部!!

還記得之前的問題嗎?

 var a=function(){}和function a(){}的區(qū)別。

它們的區(qū)別還變量的定義比較類似。一切皆對象。

他們兩個在函數(shù)調(diào)用時(shí),基本是等價(jià)的,但如果調(diào)用函數(shù),在定義函數(shù)前就會有問題了。其實(shí)區(qū)別在于等號和function關(guān)鍵字。
var和function定義在預(yù)編譯的時(shí)候被提前,var只是占位,具體賦值要等到JS引擎執(zhí)行到這行。而function定義會在JS引擎預(yù)編譯階段就被直接放入到調(diào)用對象中。

還是要舉例:

例子一:

alert( echo );//function echo(){return 1;};
function echo(){return 1;};
alert( a );//undefined
var a=function(){return 1;};

所以,函數(shù)的定義也可以引申出一句話,請將函數(shù)定義放在頂部(先定義后調(diào)用)??!

其實(shí)還是習(xí)慣的問題,JS中一些代碼的優(yōu)良習(xí)慣有別于其它語言。建議大家讀一下<>。在開始學(xué)習(xí)一門語言時(shí),最好從欣賞優(yōu)秀的代碼開始。而JS中,大家都喜歡用一系列充滿迷惑性的代碼來加深自己的理解,這其實(shí)是一個誤區(qū)。

另外說一點(diǎn),this關(guān)鍵字,laruence的解釋很簡潔到位:"誰調(diào)用,誰就是this"。英文版更詳細(xì)一點(diǎn):“In JavaScript this always refers to the “owner” of the function we're executing, or rather, to the object that a function is a method of. ”,中文解釋:“在JavaScript中,this永遠(yuǎn)引用我們所執(zhí)行函數(shù)的擁有者,更準(zhǔn)確的說,this引用一個函數(shù)的方法對象”。

看看下面的例子,也是誤導(dǎo)人的:

function a(){
 g_value="uk";
}
a();
alert(g_value);

其實(shí),比較友好的寫法應(yīng)該是這樣:

function a(){
 this.g_value="uk";
}
a();//a.apply(this);
alert(this.g_value);

關(guān)于this關(guān)鍵字,和別的語言也有區(qū)別。首先它并不是實(shí)例的引用,而是調(diào)用它的上下文。上面例子的a(),等價(jià)于a.apply(this);

call和apply的用法是一樣的,區(qū)別就在參數(shù)傳遞上。一個是一個一個傳參數(shù)的,一個是將參數(shù)作為類數(shù)組傳遞的(注意這個地方是類數(shù)組)。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


網(wǎng)站欄目:Javascript鏈?zhǔn)阶饔糜蛟敿?xì)介紹
文章起源:http://weahome.cn/article/gdeiec.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部