最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學(xué)習(xí)javascript的閉包,原型,和匿名函數(shù)之旅

 更新時(shí)間:2015年10月18日 09:46:02   作者:bondage  
Javascript中有幾個(gè)非常重要的語(yǔ)言特性——對(duì)象、原型繼承、閉包。其中閉包 對(duì)于那些使用傳統(tǒng)靜態(tài)語(yǔ)言C/C++的程序員來(lái)說(shuō)是一個(gè)新的語(yǔ)言特性,本文給大家介紹js的閉包,原型,和匿名函數(shù)之旅,感興趣的朋友一起學(xué)習(xí)吧

本文通過(guò)示例給大家介紹javascript的閉包,原型,和匿名函數(shù),具體詳情請(qǐng)看下文。

一 .>關(guān)于閉包

理解閉包 需要的知識(shí)

1.變量的作用域

例1:

var n =99; //建立函數(shù)外的全局變量
function readA(){
  alert(n); //讀取全局變量
}

readA(); //執(zhí)行此函數(shù)

例2:

function readB(){
  var c = 9;
  function readC(){
    console.log(c); //ok c可見(jiàn)
  }
  return readC;
}
alert(c); //error c is not defined.

    note:  函數(shù)內(nèi)部聲明變量c時(shí),一定要加上 var,否則 c會(huì)成為一個(gè)全局變量

所以函數(shù)內(nèi)可見(jiàn)全局變量,函數(shù)內(nèi)的局部變量卻對(duì)外不可見(jiàn)
js的作用域是鏈?zhǔn)降?父對(duì)象里的變量總對(duì)子對(duì)象可見(jiàn),子對(duì)象的對(duì)象卻對(duì)父對(duì)象不可見(jiàn)
當(dāng)我們要獲取函數(shù)內(nèi)的內(nèi)部變量

于是有了例3:

function readB(){
  var c = 9;
  function readC(){
    console.log(c);
  }
  return readC();
}
readB();

閉包很類似基于此做了一個(gè)變式

function readB(){
  var c = 9;
  function readC(){
    console.log(c);
  }
  return readC;
}
var res = readB();
res();

note:

1.慎用閉包,注意內(nèi)存占用,因?yàn)樗鼤?huì)保存父函數(shù)的狀態(tài)
2.不要隨便改變父函數(shù)內(nèi)部變量的值

理解閉包

   note: this 指包含它的函數(shù)被執(zhí)行時(shí)所屬的對(duì)象

例1:

var name = "The Window";

var object = {
  name : "My Object",

  getNameFunc : function(){  //此時(shí)this (這個(gè)執(zhí)行函數(shù))是屬于object對(duì)象的,是object對(duì)象下的一個(gè)屬性的值
    return function(){   //此時(shí)this (這個(gè)執(zhí)行函數(shù))是一個(gè)匿名函數(shù),從根對(duì)象window生成,是屬于window
      return this.name;
    };
  }
};
console.log(object.getNameFunc()()); //the window 

例2:

var name = "The Window";

var object = {
  name : "My Object",

  getNameFunc : function(){
    var that = this;
    return function(){
      return that.name;
    };

  }
};
console.log(object.getNameFunc()());  //My Object

二 .>匿名函數(shù)

直接定義一個(gè)匿名函數(shù) 然后調(diào)用這個(gè)匿名函數(shù),這種形式在jquery插件的定義時(shí)很常見(jiàn)

1.通過(guò)函數(shù)字母量的方式. 先聲明一個(gè)匿名函數(shù),然后執(zhí)行它

( function(){
  console.log('excute self');
}) ();

2.通過(guò)優(yōu)先表達(dá)式的方式 , 由于Javascript執(zhí)行表達(dá)式是從圓括號(hào)里面到外面,所以可以用圓括號(hào)強(qiáng)制執(zhí)行聲明的函數(shù)

(
  function () {
    alert(2);
  }
  ()
);

3.void操作符 用void操作符去執(zhí)行一個(gè)沒(méi)有用圓括號(hào)包圍的一個(gè)單獨(dú)操作數(shù)

void function(){ console.log('void') } ();

三 .>關(guān)于prototype

原型 prototype

理解js中的protitype首先需要明白js的面向?qū)ο笤O(shè)計(jì)

function People(name){
  this.name = name;

  console.log(this); //Window 或者 object { name: 'xxx' }
  this.introduce = function(){  //實(shí)例對(duì)象方法
    console.log(this.name);
  }
}
new People('leon').introduce();
//這里有一個(gè)非常有趣的現(xiàn)象,結(jié)合前面的來(lái)看的話,
//首先f(wàn)unction people里的this指向的默認(rèn)是Window對(duì)象
//當(dāng) 調(diào)用 People();時(shí) this 輸出為 Window對(duì)象
//但一旦調(diào)用new People('xx')時(shí), this 輸出為 {name:'xx'}
//其實(shí)也很好理解,一旦new ,便新建了一個(gè)對(duì)象

實(shí)例對(duì)象方法只能這樣 new People('leon').introduce(); 調(diào)用 因?yàn)樗褂们氨仨毘跏蓟?/p>

類的對(duì)象的靜態(tài)方法

var People = {}; //等于一個(gè)對(duì)象 {} 或者 function 數(shù)組都可以 此時(shí)People需要是引用類型
People.sayhi = function(to_who){
  console.log('hi '+ to_who);
}
People.sayhi('lee'); //調(diào)用時(shí)這樣調(diào)用

原型方法

var People = function(){};       // People 必須為一個(gè) function(){} 即為一個(gè)類,不能是對(duì)象或值類型或其他引用類型
People.prototype.meet = function(meet_who) {
  console.log('I am '+this.name + ',going to meet ' + meet_who);
};
new People('lee').meet('xx');

原型方法只能由該類的對(duì)象 調(diào)用

 A.prototype = new B();

原型看起來(lái)很像繼承,但其實(shí)不是,它更像clone更準(zhǔn)確

如果出現(xiàn)了父類和子類出現(xiàn)了重名的屬性,采取就近原則,如果找不到一級(jí)一級(jí)向上找,如果要指定調(diào)用上級(jí)的屬性,使用call方法

extendClass.prototype = new baseClass();
var instance = new extendClass();
var baseinstance = new baseClass();
baseinstance.showMsg.call(instance);
obj1.func.call(obj);

以上內(nèi)容是小編給大家分享的學(xué)習(xí)javascript的閉包,原型,和匿名函數(shù)之旅,希望對(duì)大家有用。

相關(guān)文章

  • JS關(guān)閉子窗口并且刷新上一個(gè)窗口的實(shí)現(xiàn)示例

    JS關(guān)閉子窗口并且刷新上一個(gè)窗口的實(shí)現(xiàn)示例

    這篇文章主要介紹了JS關(guān)閉子窗口并且刷新上一個(gè)窗口的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 基于jquery實(shí)現(xiàn)全屏滾動(dòng)效果

    基于jquery實(shí)現(xiàn)全屏滾動(dòng)效果

    相信大家都很喜歡網(wǎng)易郵箱、QQ瀏覽器的官方網(wǎng)站這樣的可全屏滾動(dòng)的效果,也許更多的朋友想把全屏滾動(dòng)效果做到自己的網(wǎng)站中,本文就帶著大家一起完成這個(gè)效果
    2015-11-11
  • 理解 JavaScript 預(yù)解析

    理解 JavaScript 預(yù)解析

    JavaScript是解釋型語(yǔ)言是毋庸置疑的,但它是不是僅在運(yùn)行時(shí)自上往下一句一句地解析的呢?
    2009-10-10
  • javascript之鎖定表格欄位

    javascript之鎖定表格欄位

    javascript之鎖定表格欄位...
    2007-06-06
  • Avalon中文長(zhǎng)字符截取、關(guān)鍵字符隱藏、自定義過(guò)濾器

    Avalon中文長(zhǎng)字符截取、關(guān)鍵字符隱藏、自定義過(guò)濾器

    avalon是一個(gè)簡(jiǎn)單易用迷你的MVVM框架。通過(guò)本文給大家介紹Avalon中文長(zhǎng)字符截取、關(guān)鍵字符隱藏、自定義過(guò)濾器的相關(guān)資料,需要的朋友一起學(xué)習(xí)吧
    2016-05-05
  • JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長(zhǎng)和第一幀畫(huà)面過(guò)程講解

    JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長(zhǎng)和第一幀畫(huà)面過(guò)程講解

    當(dāng)我們做一個(gè)后臺(tái)系統(tǒng)的音視頻管理模塊時(shí),通常要限制文件的大小和類型,這篇文章主要介紹了JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長(zhǎng)和第一幀畫(huà)面過(guò)程,需要詳細(xì)了解實(shí)現(xiàn)方法可以參考下文
    2023-05-05
  • 微信小程序?qū)崿F(xiàn)留言板

    微信小程序?qū)崿F(xiàn)留言板

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)留言板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • JS實(shí)現(xiàn)圖片元素轉(zhuǎn)BASE64編碼的簡(jiǎn)單示例

    JS實(shí)現(xiàn)圖片元素轉(zhuǎn)BASE64編碼的簡(jiǎn)單示例

    在Web開(kāi)發(fā)中,我們經(jīng)常需要將圖片轉(zhuǎn)換為Base64格式,以便在不依賴外部資源的情況下直接在HTML中使用,在這篇文章中,我將向您展示如何使用JavaScript將圖片元素轉(zhuǎn)BASE64編碼,需要的朋友可以參考下
    2023-12-12
  • 20個(gè)你不得不知道的js位運(yùn)算用法

    20個(gè)你不得不知道的js位運(yùn)算用法

    位運(yùn)算,那些看似晦澀但又蘊(yùn)含無(wú)限魔力的數(shù)字魔術(shù),在JavaScript開(kāi)發(fā)中扮演了默默無(wú)聞卻又至關(guān)重要的角色,本文介紹多個(gè)js位運(yùn)算的使用場(chǎng)景,闡述在JavaScript中,如何巧妙運(yùn)用位運(yùn)算實(shí)現(xiàn)效率的提升和算法的優(yōu)化,需要的朋友可以參考下
    2023-12-12
  • JavaScript實(shí)現(xiàn)PC端橫向輪播圖

    JavaScript實(shí)現(xiàn)PC端橫向輪播圖

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)PC端橫向輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評(píng)論

蒙山县| 安仁县| 永德县| 西平县| 长子县| 乃东县| 界首市| 永福县| 新沂市| 商水县| 浦县| 巩留县| 定陶县| 修文县| 太保市| 涞源县| 阳原县| 南宫市| 泽州县| 台南市| 贵南县| 唐海县| 濮阳市| 石城县| 蒙山县| 齐齐哈尔市| 湘潭市| 肇庆市| 花垣县| 绥宁县| 中超| 安岳县| 鲁甸县| 恩施市| 天台县| 静海县| 疏附县| 汕尾市| 清徐县| 荔波县| 鞍山市|