精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91网在线免费观看| 久久久国产精品亚洲一区| 久热免费在线观看| aaa在线观看| 国产精品原创巨作av| 性日韩欧美在线视频| gv天堂gv无码男同在线观看| 日日夜夜精品视频| 色综合天天做天天爱| 一区二区三区四区欧美日韩| 特黄视频在线观看| 免费成人av在线播放| 欧美华人在线视频| av电影网站在线观看| 久久的色偷偷| 色女孩综合影院| 欧美大片免费播放| 国产三级在线看| 成人在线视频一区| 成人福利在线视频| 日韩美一区二区| 欧美午夜久久| 中文字幕精品av| av漫画在线观看| 亚洲精品aa| 色诱视频网站一区| 成人免费视频91| 国产激情视频在线观看| 久久精品一区蜜桃臀影院| 国产伦精品一区二区| 国产一区二区在线视频观看| 久久久久久黄| 98精品在线视频| 全网免费在线播放视频入口| 成人在线一区| 国产一区二区三区视频在线观看| 中国免费黄色片| 国产精品2区| 欧美色精品在线视频| 激情综合在线观看| a在线视频v视频| 亚洲va欧美va天堂v国产综合| 天堂av在线中文| 欧美高清视频| 国产精品九色蝌蚪自拍| 五月天色一区| 国产高清视频在线| 久久久精品人体av艺术| 麻豆成人小视频| 午夜视频福利在线| 99久久免费视频.com| 国产精品毛片va一区二区三区| 国产jzjzjz丝袜老师水多| 狠狠网亚洲精品| 国产主播精品在线| 国产精品欧美激情在线| 韩国v欧美v亚洲v日本v| 成人免费网视频| 国产毛片一区二区三区va在线 | 91网址在线看| 国产精品一 二 三| 凸凹人妻人人澡人人添| 99久久免费精品高清特色大片| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 欧美性猛交xxxxx少妇| 色综合蜜月久久综合网| 北条麻妃在线一区二区| 国产稀缺精品盗摄盗拍| 午夜久久一区| 韩日欧美一区二区| 久久久久无码国产精品不卡| 亚洲小说欧美另类社区| 国内精品中文字幕| 日本中文字幕在线| 日本欧美一区二区三区乱码| 成人激情在线播放| 免费看黄色一级视频| 久久久噜噜噜久久人人看| 色一情一区二区三区四区| 麻豆视频在线免费观看| 一区二区欧美国产| 欧美,日韩,国产在线| 欧美暴力调教| 日韩亚洲欧美中文三级| 男人的天堂影院| 国产一区二区精品福利地址| 久久综合久久88| 三级黄色在线视频| 六月婷婷色综合| 国产精品久久久一区二区三区| 久草视频视频在线播放| 一区二区三区视频在线观看| 欧美 日韩 激情| 99久久久国产| 日韩av一区二区在线| 男女全黄做爰文章| 亚洲精选在线| 成人高清视频观看www| 婷婷丁香花五月天| 最新日韩在线视频| www.com毛片| 高清久久精品| 亚洲欧美综合v| 久草成人在线视频| 免费在线成人网| 国产手机精品在线| 午夜伦理在线| 色婷婷亚洲一区二区三区| 九九热视频免费| 亚洲第一论坛sis| 欧美日本高清一区| 又骚又黄的视频| 91在线高清观看| 国产女主播av| 欧美亚洲黄色| 中文字幕久久亚洲| www.日本精品| 成人一区二区三区在线观看| 亚洲欧美日韩国产yyy| 亚洲欧美电影| 精品国产污网站| 老熟妻内射精品一区| 丝袜美腿成人在线| 久久亚洲综合网| 免费在线国产视频| 欧美一区二区三区在线观看| 日本美女xxx| 久久xxxx精品视频| 国产精品我不卡| 日本动漫理论片在线观看网站| 欧美日本国产一区| 奇米网一区二区| 免费亚洲电影在线| 亚洲欧洲精品一区二区| 亚洲天堂资源| 国产视频久久网| 久久国产精品系列| 99国产欧美另类久久久精品| 女人被男人躁得好爽免费视频 | 午夜在线视频一区二区区别| www.久久久| 尤物视频在线看| 日韩一区二区免费电影| 青花影视在线观看免费高清| 极品少妇xxxx精品少妇偷拍| 亚洲精品一区二区三区樱花| 欧美高清xxx| 中文字幕精品一区二区精品| 伊人网av在线| 国产精品久久久爽爽爽麻豆色哟哟 | www.亚洲欧美| 亚洲欧美日韩一区| 免费不卡av网站| 欧美一区成人| 丁香五月网久久综合| 丁香花在线影院| 日韩美女一区二区三区四区| 欧美日韩在线国产| 成人v精品蜜桃久久一区| 成熟丰满熟妇高潮xxxxx视频| 加勒比色综合久久久久久久久| 97人人爽人人喊人人模波多| 亚洲 另类 春色 国产| 欧美性猛交xxxx富婆| 亚洲av无码一区二区三区人 | 人妻激情偷乱视频一区二区三区| 一个色综合网| 国产精品一区二区三区免费观看| h片在线观看视频免费| 亚洲毛片在线观看| 成人免费一级片| 综合色中文字幕| 原创真实夫妻啪啪av| 极品av少妇一区二区| 精品国产一区二区三区四区精华| 成人香蕉视频| 最近2019年日本中文免费字幕| 国产情侣一区二区| 亚洲一区二区高清| 在线观看福利片| 极品少妇一区二区| 免费看又黄又无码的网站| 欧美日韩爱爱| 亚洲一区亚洲二区亚洲三区| japanese色国产在线看视频| 国产亚洲精品久久久| 国产精品爽爽久久久久久| 性做久久久久久久免费看| 中文字幕在线1| 国内精品在线播放| aa视频在线播放| 秋霞欧美视频| 国产成人精品日本亚洲11 | 亚洲国产日韩在线| 性欧美大战久久久久久久免费观看 | 九九综合九九| 91久久综合亚洲鲁鲁五月天| 成年女人在线看片| 久久精品国产一区二区三区| 天天操天天舔天天干| 在线免费视频一区二区| 久久久久久久国产精品毛片| 久久久亚洲精品石原莉奈| 奇米777在线| 丝袜诱惑亚洲看片 | 久久久久网站| 国产亚洲精品久久久久久久| 国产永久精品大片wwwapp| 国产精品国产一区二区| 日韩一级特黄| 日本精品久久久| 天堂av在线电影| 国产亚洲欧美aaaa| 色视频在线看| 精品人伦一区二区色婷婷| 中文在线免费观看| 岛国av一区二区| 久久久久亚洲av成人片| 中文字幕日本乱码精品影院| 手机免费看av| 2023国产一二三区日本精品2022| 在线观看一区二区三区视频| 免费在线一区观看| www黄色av| 亚洲大片av| 天堂а√在线中文在线| 99久久婷婷| 亚洲欧美日韩另类精品一区二区三区| 妖精视频一区二区三区免费观看 | 欧美猛男男男激情videos| 国产精品久久久久久久久久直播 | 欧美色网在线| 欧美一级成年大片在线观看| 91资源在线观看| 色综合色综合久久综合频道88| 在线免费看黄| 在线视频中文亚洲| 成年在线电影| 亚洲天堂av综合网| 激情视频在线观看免费| 亚洲精品日韩在线| 亚洲日本国产精品| 精品无码久久久久久国产| 日本wwwxxxx| 欧美精品一区二区三区蜜臀| 六月婷婷综合网| 精品国产91久久久久久久妲己| 成人毛片在线免费观看| 精品国产乱码久久久久久1区2区| 成 人 免费 黄 色| 日韩免费观看高清完整版| av网站在线观看免费| 欧美一区二区三区色| 99久久亚洲精品日本无码| 91精品国产色综合久久ai换脸 | 91精品国产高潮对白| 亚洲成精国产精品女| 国产乡下妇女做爰| 天涯成人国产亚洲精品一区av| xxxxxx国产| 欧美性生活大片免费观看网址| 一级片在线观看免费| 欧美日韩在线播放三区| 国产一区二区在线视频观看| 欧美一区二区三区日韩视频| 国精产品一品二品国精品69xx| 亚洲国产一区二区三区四区| 久蕉依人在线视频| 色偷偷噜噜噜亚洲男人| av在线导航| 国外视频精品毛片| 亚洲wwww| 91中文精品字幕在线视频| 涩爱av色老久久精品偷偷鲁| 国产日韩久久| av中文一区| 国产成人一二三区| 男人天堂欧美日韩| 久久久久久久久久一区| 懂色中文一区二区在线播放| 亚洲第九十七页| 国产精品成人免费在线| 在线观看 中文字幕| 91福利视频在线| av一区二区三| 亚洲色图色老头| 一区二区三区伦理| 亲子乱一区二区三区电影 | 91麻豆免费视频网站| 五月天视频一区| 一二三四区在线| 亚洲国产成人在线播放| 不卡在线视频| 午夜免费久久久久| 日本免费在线一区| 久久影视中文粉嫩av| 我不卡神马影院| 欧美国产激情视频| 国产一区二区三区美女| 亚欧洲乱码视频| 一区二区在线观看视频在线观看| 无码人妻熟妇av又粗又大| 欧美成人video| 97人人在线| 欧美在线亚洲一区| 亚洲精选av| 亚洲免费视频一区| 先锋影音久久久| 成人啪啪18免费游戏链接| 国产精品美女久久久久久2018| 中国一级免费毛片| 91精品国产综合久久精品性色| 欧洲毛片在线| 久久久久久久久亚洲| 亚洲男男av| 日韩国产一区久久| 亚洲视频成人| 国产麻豆剧传媒精品国产| 中文一区在线播放| 精品人妻无码一区二区性色| 精品电影一区二区三区| 成人福利片网站| 国产精品网红直播| 国内黄色精品| 虎白女粉嫩尤物福利视频| 成人精品免费视频| 青青草在线观看视频| 91精品免费在线观看| 国产高清视频在线播放| 欧美在线一区二区三区四| 欧美大胆视频| 2018中文字幕第一页| 国产成人精品一区二区三区四区 | 色999日韩国产欧美一区二区| 免费av网站在线播放| 欧美风情在线观看| www.久久久久爱免| 在线天堂一区av电影| 乱一区二区av| 三级在线观看免费大全| 欧美精品视频www在线观看| 在线激情小视频| 国产精品视频白浆免费视频| 精品美女视频| 黄色片在线免费| 欧美激情一区不卡| 中文字幕精品一区二区精| 一个人看的www久久| 日韩av首页| 亚洲视频电影| 狠狠色狠狠色综合系列| 亚洲综合网在线| 日韩一级二级三级| 国产福利在线免费观看| 精品人伦一区二区三区| 一本色道久久综合一区 | 九九亚洲视频| 成人性视频欧美一区二区三区| 久久久不卡网国产精品二区| 国内av在线播放| www.日本久久久久com.| 国产专区精品| 老子影院午夜伦不卡大全| 99re这里只有精品首页| 无码人妻久久一区二区三区不卡| 亚洲视频在线免费观看| 日本黄色成人| 国产美女主播在线播放| 久久色在线视频| 伊人免费在线观看| 精品中文字幕视频| 欧美天堂社区| 手机在线看福利| 亚洲精品欧美激情| 色婷婷在线视频| 国产欧美精品一区二区| 午夜国产一区| 性高潮久久久久久久| 欧美日韩黄色一区二区| 欧美videosex性欧美黑吊| 明星裸体视频一区二区| 麻豆国产欧美一区二区三区| 欧美黑人一级片| 亚洲色图综合久久| 国产美女视频一区二区| 少妇人妻无码专区视频| 国产精品无码永久免费888| 精品人妻伦一区二区三区久久| 97av在线视频| 91麻豆精品国产91久久久平台| 在线观看免费视频国产| 日本道精品一区二区三区| 影院在线观看全集免费观看| 久久精品日产第一区二区三区精品版| 美女在线视频一区| 97人人澡人人爽人人模亚洲| 中文字幕久热精品视频在线| 久久99国产精品久久99大师 | 自拍偷拍亚洲图片| 春日野结衣av|