精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Javascript的this關鍵字與scope詳解

開發 前端
這里我們將介紹Javascript的this關鍵字與scope詳解,希望本文能對大家有所幫助。

Javascript this關鍵字一般來說大家并不陌生,但是如何更好的用好Javascript this關鍵字卻需要我們仔細思考,希望本文對廣大程序員有所幫助。

摘要

本系列博文主要談一些在 Javascript 使用中經常會混淆的高級應用,包括: prototype, closure, scope, this關鍵字. 對于一個需要提高自己Javascript水平的程序員,這些都是必須要掌握的.

本節主要介紹this關鍵字和scope.

本文的Javascript源代碼從 這兒 下載.

Contents

摘要引入this關鍵字關于apply和callscope詳述一些說明結論后記參考資料本文的源碼

引入

作為一個程序員, 你可能早已經習慣于面向對象語言中指代當前對象的引用(或者指針), 如的c++中的this或者 python 中的self,當然具有OO屬性( Javascript 其實更多的是一種所謂的函數式語言)的 Javascript 同樣, 它也具有引用當前屬性的對象的指針(或者引用), 也就是this關鍵字.

為了理解this關鍵字,如果你只想記住一句話,那應該是 this關鍵字總是指向當前函數的所有者對象(執行空間), 至于這句話如何理解, 可以參見下面的詳細說明.

那么什么是 scope 呢?

wikipedia 中的解釋是 In computer programming, scope is an enclosing context where values and expressions are associated. 中文即是所謂的 作用域, 它指明的是一個數值或者表達式所關聯的上下文(能夠被引用的執行空間).

scope 與this有什么關系呢? 如果從上面的定義來看, this指向的總是當前引用此函數的對象,而當你要判斷當前引用的對象時, 這時你就得弄清楚當前函數所在的 scope. 具體可見下面的分析.

Javascript this關鍵字

請看下面的幾個例子.

一個 python 的例子:

  1. class Person(object):  
  2. """a person class 
  3.     """  
  4. def __init__(self, name):  
  5. self.name = name    #這里的self指向的是實例化后的對象,如下面中的zhutao  
  6. def get_name(self):  
  7. return self.name  
  8. zhutao = Person("zhutao")  
  9. print zhutao.name  
  10. 一個 Javascript 的例子:  
  11.  
  12. window.name = "zhutao from window" 
  13. var get_name = function(){  
  14. return this.name;   // this的具體指向只能在運行時才能確定,也就是確定運行時調用其的對象  
  15. };  
  16. alert(get_name());  // 輸出zhutao from window, get_name調用的對象為window  
  17. var obj = {}  
  18. obj.name = "zhutao from obj";  
  19. alert(get_name.apply(obj)); // 輸出zhutao from obj, 我們強制地使用了 apply來更改調用的對象,使其指向obj  
  20. var innerobj = {  
  21. "name" : "zhutao from innerobj" 
  22. };  
  23. innerobj.get_name = get_name;   // 使得innerobj的get_name方法指向了global scope的get_name函數  
  24. alert(innerobj.get_name()); // 輸出zhutao from innerobj, 此時this指向的是innerobj 

那么從上面的簡單例子來看, this 總是在 運行時 才能確定其具體的指向, 也才能知道它的調用對象.而 這點也正是 動態語言 一個重要特性.

那么如何確定當前this指向的引用對象呢? 通常可以這樣判斷:

如果在global的scope(可以參見下面的說明來明確什么是global scope)來調用,則指向的是bowser的***對象window 例如: get_name()

如果, 有類似于這樣的引用, innerobj.get_name() 則很顯然this指向的是innerobj

如果我們使用了apply, call來進行強制的引用對象指向, 則也會很顯然地指向強制的對象,如 get_name.apply(obj).

關于apply和call

這2個關鍵字可以很簡單地理解為 進行this引用對象(運行空間)強制轉換, 二者的語法如下:

  1. fun.call(object, arg1, arg2, ...)   
  2. fun.apply(object, [arg1, arg2, ...])  

二者目的是相同的(動態更改函數的運行空間, 或者稱作更改this指向的對象), 只是在提供給函數的參數上的調用方法不同.

示例代碼如下:

  1. var test_call_apply = function(name, gender, school){  
  2. alert(this.age + name + gender + school);  
  3. };  
  4. test_call_apply.call({age:24}, "zhutao""male""ISCAS");  
  5. test_call_apply.apply({age:24}, ["zhutao""male""ISCAS"]); 

scope詳述

先看下面幾個例子:

  1. var global_scope = "I'm global";  
  2. var fun = function(){  
  3. var fun_scope = "I'm in fun scope";  
  4. return innerfun(){  
  5. var inner_func_scope = "I'm in the inner fun scope";  
  6. return global_scope + fun_scope + inner_func_scope; //此處的引用是重要的,請特別注意  
  7. };  
  8. };  
  9. alert(fun()()); 

請注意上面的代碼,其中:

global_scope 它是global scope

fun_scope 它是 位于一個函數的scope

inner_func_scope 是一個位于一個函數內的函數的scope

你也可以繼續內嵌函數, 那么會生成若干個scope.

于是有個問題出現了, 為什么innerfun方法可以引用不在它自身scope的變量?

在回答這個問題之前,需要引入一個概念 scope chain. 所謂的 scope chain 是指 在 Javascript 的代碼中形成的一個具有優先順序, 相關的作用域的鏈.

以上面的代碼為例,

對于global的scope而言,它會為自己建立一個global的scope chain(當然此時,這個鏈只有一個scope).對于fun函數的scope而言, 它首先建立一個與global相同的scope chain,然后再加入自己的scope(此時,這個 鏈有2個scope), 類似于這樣的結構: global==>fun對于innerfun而言,除了fun函數所具有的鏈外,它還會加入自己的scope(當然,此時這個鏈有3個scope), 類似于這樣的結構: global==>fun==>innerfunscope chain具有下面的特征:

有序每當建立一個函數時,會自動生成一個scope并加入自己的scope chain中這個chain類似于一種棧,在查找變量時總是先從頂端查起參見下圖:


上圖的3個部分對應上面代碼中的三個變量的scope, 并且在對每個變量求值時,是按照 圖中的scope chain從上到下依次查找,找到即返回值或者直到窮舉了scope chain返回undfined.

那么現在回答上面那個問題:

其實也很好理解, 在計算某個表達式時, 它會對自己的scope chain進行從上到下的查找,如果找到了 它會立即返回這個值,如果找完了整個chain也沒有找到,則返回undefined.

這個查找機制也就決定了,通常位于chain的前端的scope有更高的優先級.

例如 Javascript 在計算 global_scope + fun_scope + inner_func_scope; 這個表達式時, 它會查找上面圖示中的scope chain,從而確定出***的結果.

一些說明

如果你弄清楚了上面的論述, 應該說你對this關鍵字和scope已經具有完全的知識基礎了,但是 我們需要在實際中更好地使用和理解這些概念,這樣才能把能力上升到別一個層次, 這也即所謂的 理論與實踐 的關系.

請看下面這個例子:

  1. var change_color = function(){  
  2. this.style.color = "red";  
  3. };  
  4. window.onload = function(){  
  5. var text = document.getElementById("text");  
  6. text.onclick = change_color;    //此時this指向的是text這個對象(dom對象)  
  7. };  
  8. // 下面這行代碼是在body中  
  9. <span id="another" onclick="change_color()">My color will be changed2.</span> //這點需要特別注意, inline script指向的是window,此處會無定義 

需要特別注意的是:

inline event registration中的this并非指向的是自己的dom節點,而是global scope的window,這點可以從上面的例子中得到證明這種inline event registration是不可取的, 推薦的是 Unobtrusive Javascript (處理邏輯和頁面結構相分離)結論
Javascript 是一種非常強大的動態語言, 它是 披著C語言外衣的函數式語言, 如果你只當作它是一種 類C的命令式語言,那么你的知識層次還過于低, 而倘若你能夠理解到Javascript 的函數式語言本質, 你在運用 Javascript ,理解 jQuery 及其它的庫, 甚至自己寫一些 Javascript 都會游刃有余的.

后記

本系列的計劃的內容已經結束,除了這些而外, 我還想寫一至二篇補遺的 Javascript 的高級知識來作為本系列的終結. 可能會寫的內容包括:

Javascript 函數式語言特征探究Javascript 相關庫的分析Unobtrusive Javascript 的一些理解和實踐總之, Javascript 本身是很值得探究的一個語言, 也有很多的值得一書的地方, 我希望后續能夠不斷地完成這個計劃.

其實,之前寫過 Django開發必知必會 以及本系列的 Javascript必知必會, 發現在寫這些內容的同時,自己的相關 知識也有了很大的提高, 寫的同時, 站的角度不只是作為一個 自學者 ,而是作為一個 教者 ,我希望能夠看到這些 內容的讀者也能夠受益. 所以我想后續,我可能會寫一些 計算機科學 的其它專題, 如:

python必知必會正則表達式必知必會Web開發必知必會等等如果這個"宏偉"的計劃得以完成, 我想也就成就我自已定義的一個 優秀程序員 的知識基礎.

這是一個初步的計劃, 我會逐漸展開的. 希望大家能夠不斷反饋.

原文標題:javascript必知必會之this關鍵字及scope

鏈接:http://www.cnblogs.com/mindsbook/archive/2009/09/27/javascriptYouMustKnow-this-scope.html

【編輯推薦】

  1. 淺析利用Javascript獲取隨機顏色
  2. JSON是什么?為JavaScript準備的數據格式
  3. 十個最常用的JavaScript自定義函數
  4. 有關JavaScript事件加載的一些延伸思考
  5. JavaScript使用心得匯總:從BOM和DOM談起
責任編輯:彭凡 來源: 博客園
相關推薦

2022-11-12 18:32:50

Golangomitemptyjson

2021-02-01 13:10:07

Staticc語言UNIX系統

2013-01-30 10:12:14

Pythonyield

2009-09-02 09:24:03

C# this關鍵字

2011-06-14 13:26:27

volatile

2021-07-27 07:31:16

單例模式關鍵字

2025-06-13 08:00:00

Java并發編程volatile

2019-12-17 08:16:04

JavaScriptthis編程

2025-07-29 06:00:00

final關鍵字開發

2017-05-27 20:59:30

Java多線程synchronize

2010-02-05 15:51:06

C++ explici

2023-11-10 09:29:30

MySQLExplain

2023-03-09 07:38:58

static關鍵字狀態

2024-03-15 11:52:03

C++關鍵字編程

2023-09-22 22:27:54

autoC++11

2024-01-15 10:41:31

C++關鍵字開發

2024-03-15 15:12:27

關鍵字底層代碼

2022-02-17 08:31:38

C語言staic關鍵字

2022-05-06 08:32:40

Pythonwith代碼

2025-01-09 10:30:40

點贊
收藏

51CTO技術棧公眾號

啊v视频在线| 免费看黄色的视频| √8天堂资源地址中文在线| 成人免费福利片| 欧美亚洲视频在线观看| 免费网站在线高清观看| 久久视频免费| 色综合久久久久| 日本一区二区三区四区五区六区| 婷婷在线免费观看| 日韩av成人高清| 久久久亚洲福利精品午夜| 欧美黄色一级生活片| 在线综合色站| 欧美视频在线观看一区| 国产freexxxx性播放麻豆| 国产精品国产亚洲精品看不卡15 | 国产精品一区免费在线| 亚洲av无码国产精品久久不卡| 国产一区日韩| 精品国产一区二区三区久久影院 | 精品国产91久久久久久久妲己| 粉嫩虎白女毛片人体| 青青草视频在线免费直播| 国产日韩欧美综合一区| 国产精品一区二区欧美黑人喷潮水 | 国产精品成人观看视频国产奇米| 精品欧美一区二区久久久久 | 揄拍成人国产精品视频| 成人免费看片载| 亚洲我射av| 色伊人久久综合中文字幕| 欧妇女乱妇女乱视频| 午夜老司机在线观看| 久久你懂得1024| 国产另类自拍| 亚洲AV无码乱码国产精品牛牛| 蜜臀av国产精品久久久久| 欧美一级黄色网| 国产在线拍揄自揄拍| 国产精品二区不卡| 中文字幕日本欧美| av网在线播放| 国产精品一国产精品| 日韩av在线免费播放| 欧美精品日韩精品| 国产精品久久久一区麻豆最新章节| 96久久精品| 97人妻精品一区二区三区动漫| 丝袜美腿亚洲一区二区图片| 艳妇臀荡乳欲伦亚洲一区| 日韩视频在线观看国产| 男人久久精品| 久久一区二区视频| 美日韩精品免费| 婷婷色在线观看| 91在线免费播放| 久久99九九| 性感美女福利视频| 97se亚洲国产综合自在线观| 九色综合婷婷综合| 欧美偷拍视频| 国产亚洲综合在线| 亚洲v国产v在线观看| 成人免费在线电影| 国产精品久久久久影院色老大| 亚洲欧洲久久| 伊人影院在线视频| 亚洲一区二区三区视频在线 | 欧美日韩精品免费观看视频| 男女视频在线看| 亚洲精品成人一区| 日韩精品一区二区三区视频| 国产成人精品无码片区在线| 丝袜连裤袜欧美激情日韩| 亚洲女同精品视频| 正在播放国产对白害羞| 亚洲精品久久久| 欧美二区乱c黑人| 色网站在线播放| 日韩精品免费视频人成| 91精品国产自产在线老师啪| 亚洲精品字幕在线| 91免费视频大全| 一区二区视频在线播放| 中文字幕在线三区| 欧美视频免费在线| 日韩毛片在线免费看| 日韩欧美专区| 亚洲激情第一页| 日本不卡一二三区黄网| 天天综合色天天综合色h| 日韩欧美视频网站| 88xx成人免费观看视频库 | 成人免费看片'免费看| 成人性生交大片免费看网站| 欧美午夜久久久| 国产精品一区二区小说| 久久久久久久久久久久电影| 日韩电影在线观看中文字幕| 免费成人深夜天涯网站| 影院欧美亚洲| 国产精品一二三视频| 亚洲风情第一页| 国产欧美综合在线| 大西瓜av在线| 精品久久久网| 日韩av在线看| 久草视频中文在线| 免费成人在线观看视频| 国产一区视频观看| 99精品老司机免费视频| 福利视频一区二区| 三级黄色片免费观看| 少妇精品久久久一区二区| 久久成人免费视频| 99久久久无码国产精品免费蜜柚| 国产a区久久久| 一本一本a久久| 亚洲综合电影| 亚洲成年人在线播放| 顶级黑人搡bbw搡bbbb搡| 噜噜噜在线观看免费视频日韩| 亚洲最大的成人网| 97人人在线| 色天使久久综合网天天| 在线黄色免费网站| 欧美成人久久| 91久久久久久久一区二区| 免费福利在线视频| 精品二区三区线观看| 日本泡妞xxxx免费视频软件| 香港欧美日韩三级黄色一级电影网站| 国产精品第二页| 欧美日韩伦理片| 欧美日韩激情小视频| av不卡中文字幕| 正在播放日韩欧美一页| 国产欧美一区二区三区在线看 | 大桥未久女教师av一区二区| 久久久国产精品视频| 成年人免费大片| 久操视频免费在线观看| 免费在线看成人av| 日本一区二区免费看| 中文字幕在线直播| 日韩电影中文字幕在线观看| 国产无遮挡又黄又爽又色| 国产成人av一区二区三区在线| 国产成年人在线观看| 一级欧美视频| 久久久精品中文字幕| 国产乱码精品一区二三区蜜臂 | 国产69精品久久99不卡| 好吊色视频988gao在线观看| 国产精品1区在线| 久久影视电视剧免费网站| 国产又粗又黄又爽的视频| 国产精品家庭影院| www.五月天色| 欧美黄色免费| 国产欧美一区二区三区不卡高清| 草草视频在线观看| 日韩精品视频免费在线观看| 在线精品免费视| 中文字幕第一区第二区| 女人高潮一级片| 五月激情综合| 国产高清在线一区| 乡村艳史在线观看| 伊人久久免费视频| 夜夜爽8888| 亚洲综合免费观看高清在线观看| 中国极品少妇videossexhd| 国产精品丝袜xxxxxxx| 日本欧美色综合网站免费| 成人mm视频在线观看| 精品国产美女在线| 二区三区在线视频| 欧美性黄网官网| 少妇高潮在线观看| 99久久精品国产毛片| 男女爽爽爽视频| 综合久久婷婷| 久久99国产精品| 六九午夜精品视频| 欧美黑人xxxx| 国产鲁鲁视频在线观看免费| 欧美一区二区三区精品| www..com国产| 国产精品久线观看视频| 欧美久久久久久久久久久| 免费看的黄色欧美网站| 中文字幕日韩一区二区三区不卡| 国产一区在线电影| 国产免费一区二区三区在线能观看 | 视频一区中文| 亚洲一区中文字幕| 欧美xx视频| 欧美精品成人在线| av中文字幕一区二区三区| 日韩精品专区在线影院重磅| 91视频久久久| 亚洲国产视频直播| 亚洲精品电影院| 99国产精品久久久久| 亚洲第一天堂久久| 久久久亚洲人| 隔壁人妻偷人bd中字| 99久久视频| 久久精品中文字幕一区| 黄色片久久久久| 婷婷综合社区| 日本一区二区三区视频在线观看| 亚洲一区二区三区日本久久九| 国产精品中文在线| 2022成人影院| 97精品视频在线观看| 国产一二三区在线观看| 一区二区三区在线播放欧美| 五月天福利视频| 精品伦理精品一区| 国产精品午夜福利| 欧美亚洲自拍偷拍| 天天干天天干天天干天天| 亚洲综合一区二区| 中日韩一级黄色片| 国产精品欧美一级免费| 精品少妇一区二区三区免费观| 成人综合在线网站| 深夜福利网站在线观看| 久久99国产乱子伦精品免费| av无码精品一区二区三区| 99视频一区| 欧美午夜小视频| 韩国亚洲精品| 在线视频不卡国产| 欧美第十八页| 亚洲国产一区二区三区在线| 精品久久久久久久久久久aⅴ| 鲁鲁狠狠狠7777一区二区| 久久九九热re6这里有精品 | 中文字幕欧美人妻精品一区| 国产一区二区精品| 国产一区二区在线视频播放| 一区视频在线看| 日韩精品在线视频免费观看| 国产精品草草| 99色这里只有精品| 在线欧美视频| 男人日女人逼逼| 久久精品九九| 国产精品少妇在线视频| 日韩电影在线一区二区| 国产精品久久久久久一区二区| 日韩精品一区二区在线播放| 亚洲精品国产精华液| 老司机成人免费视频| 亚洲视频一区二区在线| 国产精品一区二区久久久| 日韩三区免费| 国产精品久久久久久久久久久不卡 | 人妻夜夜添夜夜无码av| 亚洲人人精品| 东京热加勒比无码少妇| 日本亚洲免费观看| 日本中文字幕精品—区二区| 九色porny丨国产精品| 亚洲欧美一区二区三区不卡| 粉嫩久久99精品久久久久久夜 | 久久久伦理片| 欧美日韩一区二区三区在线视频| 国产一区二区三区四区二区| 亚洲一区三区| 欧美日韩一区自拍 | 国产毛片精品视频| 国产伦精品一区二区三区精品| 久久久久久久久伊人| 国产中文字幕久久| 亚洲国产精品久久人人爱蜜臀| 黄色片中文字幕| 欧美日本视频在线| 高潮毛片7777777毛片| 亚洲图片欧美日产| 中中文字幕av在线| 成人3d动漫在线观看| 亚洲一区二区三区香蕉| 久久97精品| 亚洲高清乱码| 亚洲国产一区二区精品专区| 污污动漫在线观看| a级精品国产片在线观看| 国产又粗又猛又爽又黄的视频四季| 一卡二卡欧美日韩| 国产偷人爽久久久久久老妇app| 日韩一级欧美一级| 二区在线视频| 97久久久久久| 久久国产精品美女| 日本在线成人一区二区| 韩国一区二区三区在线观看| 日本超碰在线观看| 久久综合精品国产一区二区三区| 国产三级国产精品国产国在线观看| 黑人巨大精品欧美一区免费视频| 国产乱色精品成人免费视频| 亚洲美女视频网站| 大黄网站在线观看| 91久久嫩草影院一区二区| 国产精品午夜一区二区三区| 黄色一级在线视频| 国产精品一区二区无线| 久久国产精品无码一级毛片 | 欧美日韩国产首页| 天天av天天翘| 久久精品91久久久久久再现| 香蕉久久免费电影| 999国内精品视频在线| 精品中国亚洲| av在线免费观看国产| 美女精品一区二区| 精品无人区无码乱码毛片国产 | 亚洲欧洲自拍偷拍| 日韩三级免费| 久久伊人中文字幕| 性折磨bdsm欧美激情另类| 国产精品欧美久久久久无广告| 日韩精品视频播放| 日韩一区二区麻豆国产| 精品麻豆一区二区三区| 国产999精品久久久| 日韩高清影视在线观看| 亚洲天堂第一区| 老鸭窝一区二区久久精品| 美国美女黄色片| 色欧美片视频在线观看在线视频| 婷婷婷国产在线视频| 欧美国产日韩一区| 国产精久久久| 国产 欧美 日本| 精品一区二区三区不卡| 一级性生活免费视频| 在线观看免费视频综合| 国产女主播一区二区| 日韩精品av| 91大片在线观看| 狠狠操综合网| 激情综合网俺也去| 国产精品福利网| 精品国产乱码一区二区三区| 欧美日韩亚洲免费| 亚洲麻豆视频| 亚洲第九十七页| 精品久久久久久国产91| 亚洲AV第二区国产精品| 欧美激情视频在线免费观看 欧美视频免费一 | 疯狂欧洲av久久成人av电影| 亚洲第一精品区| 精品一区二区三区免费视频| 欧美 日本 国产| 欧美在线制服丝袜| 98在线视频| 99精品国产高清一区二区| 亚洲精品a级片| 久久性爱视频网站| 天天综合色天天综合色h| 少妇又色又爽又黄的视频| 欧美一级大片在线观看| 国产一区二区三区探花| 亚洲精品手机在线观看| 成人免费视频在线观看| 精品国产乱码一区二区三| 久久久久久久999| 日本在线中文字幕一区| 亚洲无吗一区二区三区| 国产精品三级电影| 亚洲a视频在线| 97人人模人人爽人人喊中文字| 九九久久成人| 国产一级片自拍| 一个色综合网站| 天堂在线中文字幕| 国产精品福利网| 亚洲福利精品| japanese中文字幕| 日韩一区二区三区在线| 亚洲亚洲精品三区日韩精品在线视频 | 日本va欧美va精品发布| 国产精品国产三级国产专播精品人 | 亚洲精品成人久久久998| 免费成人av资源网| 五月天丁香激情| 日韩电影大全免费观看2023年上| 免费一级欧美在线观看视频| 99久re热视频精品98| 久久久久国产精品厨房| 国产又粗又大又爽| 国产999在线| 国模 一区 二区 三区| 精品人妻一区二区三区日产乱码卜|