欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript 鏈式作用域詳細介紹

 更新時間:2017年02月23日 14:17:00   作者:DoubleLi  
這篇文章主要介紹了Javascript 鏈式作用域詳細介紹的相關資料,需要的朋友可以參考下

 Javascript 鏈式作用域

其實對于Javascript鏈式作用域的描述,包括,JS權威指南,都有些太冗長了--但是很準確:JavaScript中的函數(shù)運行在他們被定義的作用域里,而不是他們被執(zhí)行的作用域里。

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

說白了鏈式作用域,其實就是Javascript的一個特性:子函數(shù)中可以訪問父函數(shù)的所有變量。當然也包括全局變量window(一般的函數(shù)定義function a(){},其實都是window對象的子函數(shù))。另外補充一下,函數(shù)定義有兩種方式,其實略有差別:

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

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

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

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

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

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

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

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

還記得之前的問題嗎?

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

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

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

還是要舉例:

例子一:

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

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

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

另外說一點,this關鍵字,laruence的解釋很簡潔到位:"誰調(diào)用,誰就是this"。英文版更詳細一點:“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永遠引用我們所執(zhí)行函數(shù)的擁有者,更準確的說,this引用一個函數(shù)的方法對象”。

看看下面的例子,也是誤導人的:

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

其實,比較友好的寫法應該是這樣:

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

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

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

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

相關文章

  • Three.js實現(xiàn)瀏覽器變動時進行自適應的方法

    Three.js實現(xiàn)瀏覽器變動時進行自適應的方法

    這篇文章主要給大家介紹了關于Three.js實現(xiàn)瀏覽器變動時進行自適應的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-09-09
  • 基于Web標準的UI組件 — 樹狀菜單(2)

    基于Web標準的UI組件 — 樹狀菜單(2)

    基于Web標準的UI組件 — 樹狀菜單(2)...
    2006-09-09
  • 深入探究JavaScript中WeakMap的原理與用法

    深入探究JavaScript中WeakMap的原理與用法

    這篇文章主要對JavaScript中的WeakMap進行深入探究,包括它的原理、用法和注意事項等,文中的示例代碼簡潔易懂,需要的小伙伴可以參考一下
    2023-05-05
  • JavaScript操作localStorage實現(xiàn)保存本地json文件

    JavaScript操作localStorage實現(xiàn)保存本地json文件

    這篇文章主要為大家詳細介紹了JavaScript如何操作localStorage實現(xiàn)保存本地json文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • JS 用6N±1法求素數(shù) 實例教程

    JS 用6N±1法求素數(shù) 實例教程

    顯然,當N≥1時,6N,6N+2,6N+3,6N+4都不是素數(shù),只有形如6N+1和6N+5的自然數(shù)有可能是素數(shù)。所以,除了2和3之外,所有的素數(shù)都可以表示成6N±1的形式(N為自然數(shù))。
    2009-10-10
  • BootStrap Table后臺分頁時前臺刪除最后一頁所有數(shù)據(jù)refresh刷新后無數(shù)據(jù)問題

    BootStrap Table后臺分頁時前臺刪除最后一頁所有數(shù)據(jù)refresh刷新后無數(shù)據(jù)問題

    這篇文章主要介紹了BootStrap Table后臺分頁時前臺刪除最后一頁所有數(shù)據(jù)refresh刷新后無數(shù)據(jù)問題,需要的朋友可以參考下
    2016-12-12
  • MSAgent 詳細解說

    MSAgent 詳細解說

    MSAgent 詳細解說...
    2006-11-11
  • js延遲加載的6種方式實例總結(jié)

    js延遲加載的6種方式實例總結(jié)

    js的延遲加載有助與提高頁面的加載速度,下面這篇文章主要給大家介紹了關于js延遲加載的6種方式,文中通過圖文介紹的非常詳細,對大家學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-04-04
  • 淺談JavaScript的閉包函數(shù)

    淺談JavaScript的閉包函數(shù)

    閉包是有權訪問另一個函數(shù)作用域中的變量的函數(shù)。首先要明白的就是,閉包是函數(shù)。由于要求它可以訪問另一個函數(shù)的作用于中的變量,所以我們往往是在一個函數(shù)的內(nèi)部創(chuàng)建另一個函數(shù),而“另一個函數(shù)”就是閉包。本文對其進行系統(tǒng)分析,需要的朋友可以看下
    2016-12-12
  • JavaScript簡單實現(xiàn)的仿微博留言功能示例

    JavaScript簡單實現(xiàn)的仿微博留言功能示例

    這篇文章主要介紹了JavaScript簡單實現(xiàn)的仿微博留言功能,涉及javascript頁面元素屬性動態(tài)操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01

最新評論