Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日韩中文字幕在线观看,成人网在线视频,最近中文字幕高清字幕在线视频

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript作用域例子1分析

          JavaScript作用域例子1分析

          面是2個作用域的題目,可以試著先做一遍,然后想想背后的原因。

          function foo(b) {

          var a=b;

          return {

          a: a,

          change: function(b) {

          console.log(a, b, this.a);

          a=a + b + this.a;

          },

          output: function() {

          console.log(a, this.a, b);

          }

          }

          }

          var x=foo(1);

          console.log('change before:')

          console.log(x.a); // 1;

          x.output(); // 1, 1, 1

          x.a=3;

          x.change(2); // 1, 2, 3

          console.log('after change:');

          console.log(x.a); // 3

          x.output(); // 6, 3, 1


          原因分析

          var x=foo(1); // 執行后,x函數里面返回的對象,里面的屬性和值都在執行過程中確定了,作用域范圍在代碼定義的位置。

          console.log('change before:')

          console.log(x.a); // 1;

          // x.a=1。因為foo()函數里面返回對象中屬性a被賦值為變量a,

          // 而變量a在foo(1)執行時被賦值為b也就是1

          x.output();

          // a=1, this.a=1, b=1

          // a, output函數沒有變量a,通過作用域鏈向上查找, 父函數foo中有變量a

          // this.a, 函數執行上下文的this指向函數的調用方也就是x對象,x被賦值為1

          // b, output也是通過作用域鏈向上查找到foo里的變量b,是foo里面的形參變量

          x.a=3;

          // 修改x.a為3,此時影響的只是x對象中的a屬性,并不影響foo函數作用域下a變量

          x.change(2);

          // a=1, b=2, this.a=3

          // a, 仍然是foo第一次被調用時的值,沒有被修改,仍然是1

          // b,這個b是change函數的形參變量,不是外部的b, b被賦值為2

          // this.a,此時this.a也就是x.a,已經被修改為3

          // 執行這句后,foo作用域下的a變量被賦值為a+b+this.a=1+2+3=6

          console.log('after change:');

          console.log(x.a); // 3

          // x.a沒有受到影響,依然是3

          x.output();

          // a=6, this.a=3, b=1

          // a在執行change(2)時已經被改成6了

          // this.a就是x.a,因此是3

          // b從output沿作用域開始查找,值仍是1,b沒有被改過

          以預估下結果,然后對比下答案

          let x=1,

          y=2;

          function foo(x) {

          let y=x;

          let obj={

          x: x++,

          y: --y,

          setXY: function(a, y) {

          y=x + a;

          console.log('setXY:', x, this.x, y, this.y);

          },

          getXY: function() {

          console.log('getXY:', x, this.x, y, this.y);

          return x;

          }

          }

          return obj;

          }

          let f=foo(3);

          f.setXY(x, y);

          f.getXY();

          console.log('outer:', x, f.x, y, f.y);

          // 打印結果:

          // setXY: x=4, this.x=3, y=5, this.y=2

          // getXY: x=4, this.x=3, y=2, this.y=2

          // outer: x=1, f.x=3, y=2, f.y=2

          本例子融合了靜態作用域、作用域鏈,以及i++、++i還有值傳遞為一體的例子。但并不繞,或者故意設置冗余的干擾。

          結果分析如下:

          let f=foo(3);

          // 定義f變量為foo(3)的執行結果,返回 obj={x: 3, y:2, ...}

          // foo函數下有x形參變量,也定義了y變量并賦值為x,同時返回了obj對象

          // foo(3)在執行時,形參變量x賦值為3,obj.x賦值為變量x++

          // 因為++在后,先賦值obj.x=x, 然后x再自增1。x變為4, obj.x仍是3

          // obj.y賦值為變量--y,先y減1,然后再將obj.y賦值為y的值,也就是obj.y=y=2

          f.setXY(x, y);

          // 調用setXY,傳入x,y參數。x與y都是全局的x,y,且x與y并沒有被修改過,因此傳入的是1,2

          // 首先y是自己作用域的形參變量,JS參數是值傳遞,因此傳入給變量y的是全局y的值2

          // 執行y=x+a這句,此時x沿作用域鏈往上在foo里找到,x已自增為4, a是1,y=x+a=5

          // this.x也就是obj.x,還是之前執行后的值3

          // this.y也就是obj.y,還是之前執行后的值2

          f.getXY();

          // 調用getXY

          // x沿作用域鏈向上查找到foo下的x,也就是4

          // this.x是obj.x,還是3

          // y沿作用域鏈查找到foo下的y,仍是2,注意這個y不是setXY里面的那個y

          // this.y是obj.y,仍是2

          console.log('outer:', x, f.x, y, f.y);

          // 在最外部打印這四個對象

          // x是全局作用域下的x,且x沒有被干預過,仍然是1

          // y是全局作用域下的y, 也沒有被干預過,仍然是2,但不是foo里面的y

          // f.x是obj.x,還是3

          // f.y是obj.y,仍是2

          TML 屬性

          HTML 標簽可以擁有屬性。屬性提供了有關 HTML 元素的更多的信息。

          屬性總是以名稱/值對的形式出現,比如:name="value"。

          屬性總是在 HTML 元素的開始標簽中規定。

          屬性實例

          HTML 鏈接由 <a> 標簽定義。鏈接的地址在 href 屬性中指定:

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <a >

          This is a link</a>

          </body>

          </html>

          [/demo]

          更多 HTML 屬性實例

          屬性例子 1:

          <h1> 定義標題的開始。

          <h1 align="center"> 擁有關于對齊方式的附加信息。

          [demo]

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

          "http://www.w3.org/TR/html4/loose.dtd">

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h1 align="center">This is heading 1</h1>

          <p>上面的標題在頁面中進行了居中排列。上面的標題在頁面中進行了居中排列。上面的標題在頁面中進行了居中排列。</p>

          </body>

          </html>

          [/demo]

          屬性例子 2:

          <body> 定義 HTML 文檔的主體。

          <body bgcolor="yellow"> 擁有關于背景顏色的附加信息。

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          <meta http-equiv="Content-Type" content="text/html />

          <meta http-equiv="Content-Language" content="zh-cn" />

          </head>

          <body bgcolor="yellow">

          <h2>請看: 改變了顏色的背景。</h2>

          </body>

          </html>

          [/demo]

          屬性例子 3:

          <table> 定義 HTML 表格。(您將在稍后的章節學習到更多有關 HTML 表格的內容)

          <table border="1"> 擁有關于表格邊框的附加信息。

          HTML 提示:使用小寫屬性

          屬性和屬性值對大小寫不敏感。

          不過,萬維網聯盟在其 HTML 4 推薦標準中推薦小寫的屬性/屬性值。

          而新版本的 (X)HTML 要求使用小寫屬性。

          始終為屬性值加引號

          屬性值應該始終被包括在引號內。雙引號是最常用的,不過使用單引號也沒有問題。

          在某些個別的情況下,比如屬性值本身就含有雙引號,那么您必須使用單引號,例如:

          name='Bill "HelloWorld" Gates'

          下面列出了適用于大多數 HTML 元素的屬性:

          屬性 值 描述

          class classname 規定元素的類名(classname)

          id id 規定元素的唯一 id

          style style_definition 規定元素的行內樣式(inline style)

          title text 規定元素的額外信息(可在工具提示中顯示)

          HTML 全局屬性

          HTML 屬性賦予元素意義和語境。

          下面的全局屬性可用于任何 HTML 元素。

          HTML 全局屬性

          屬性 描述

          accesskey 規定激活元素的快捷鍵。

          class 規定元素的一個或多個類名(引用樣式表中的類)。

          contenteditable 規定元素內容是否可編輯。

          contextmenu 規定元素的上下文菜單。上下文菜單在用戶點擊元素時顯示。

          data-* 用于存儲頁面或應用程序的私有定制數據。

          dir 規定元素中內容的文本方向。

          draggable 規定元素是否可拖動。

          dropzone 規定在拖動被拖動數據時是否進行復制、移動或鏈接。

          hidden 規定元素仍未或不再相關。

          id 規定元素的唯一 id。

          lang 規定元素內容的語言。

          spellcheck 規定是否對元素進行拼寫和語法檢查。

          style 規定元素的行內 CSS 樣式。

          tabindex 規定元素的 tab 鍵次序。

          title 規定有關元素的額外信息。

          translate 規定是否應該翻譯元素內容。

          HTML 事件屬性

          Window 事件屬性

          針對 window 對象觸發的事件(應用到 <body> 標簽):

          屬性 值 描述

          onafterprint script 文檔打印之后運行的腳本。

          onbeforeprint script 文檔打印之前運行的腳本。

          onbeforeunload script 文檔卸載之前運行的腳本。

          onerror script 在錯誤發生時運行的腳本。

          onhaschange script 當文檔已改變時運行的腳本。

          onload script 頁面結束加載之后觸發。

          onmessage script 在消息被觸發時運行的腳本。

          onoffline script 當文檔離線時運行的腳本。

          ononline script 當文檔上線時運行的腳本。

          onpagehide script 當窗口隱藏時運行的腳本。

          onpageshow script 當窗口成為可見時運行的腳本。

          onpopstate script 當窗口歷史記錄改變時運行的腳本。

          onredo script 當文檔執行撤銷(redo)時運行的腳本。

          onresize script 當瀏覽器窗口被調整大小時觸發。

          onstorage script 在 Web Storage 區域更新后運行的腳本。

          onundo script 在文檔執行 undo 時運行的腳本。

          onunload script 一旦頁面已下載時觸發(或者瀏覽器窗口已被關閉)。

          Form 事件

          由 HTML 表單內的動作觸發的事件(應用到幾乎所有 HTML 元素,但最常用在 form 元素中):

          屬性 值 描述

          onblur script 元素失去焦點時運行的腳本。

          onchange script 在元素值被改變時運行的腳本。

          oncontextmenu script 當上下文菜單被觸發時運行的腳本。

          onfocus script 當元素失去焦點時運行的腳本。

          onformchange script 在表單改變時運行的腳本。

          onforminput script 當表單獲得用戶輸入時運行的腳本。

          oninput script 當元素獲得用戶輸入時運行的腳本。

          oninvalid script 當元素無效時運行的腳本。

          onreset script 當表單中的重置按鈕被點擊時觸發。HTML5 中不支持。

          onselect script 在元素中文本被選中后觸發。

          onsubmit script 在提交表單時觸發。

          Keyboard 事件

          屬性 值 描述

          onkeydown script 在用戶按下按鍵時觸發。

          onkeypress script 在用戶敲擊按鈕時觸發。

          onkeyup script 當用戶釋放按鍵時觸發。

          Mouse 事件

          由鼠標或類似用戶動作觸發的事件:

          屬性 值 描述

          onclick script 元素上發生鼠標點擊時觸發。

          ondblclick script 元素上發生鼠標雙擊時觸發。

          ondrag script 元素被拖動時運行的腳本。

          ondragend script 在拖動操作末端運行的腳本。

          ondragenter script 當元素元素已被拖動到有效拖放區域時運行的腳本。

          ondragleave script 當元素離開有效拖放目標時運行的腳本。

          ondragover script 當元素在有效拖放目標上正在被拖動時運行的腳本。

          ondragstart script 在拖動操作開端運行的腳本。

          ondrop script 當被拖元素正在被拖放時運行的腳本。

          onmousedown script 當元素上按下鼠標按鈕時觸發。

          onmousemove script 當鼠標指針移動到元素上時觸發。

          onmouseout script 當鼠標指針移出元素時觸發。

          onmouseover script 當鼠標指針移動到元素上時觸發。

          onmouseup script 當在元素上釋放鼠標按鈕時觸發。

          onmousewheel script 當鼠標滾輪正在被滾動時運行的腳本。

          onscroll script 當元素滾動條被滾動時運行的腳本。

          Media 事件

          由媒介(比如視頻、圖像和音頻)觸發的事件(適用于所有 HTML 元素,但常見于媒介元素中,比如 <audio>、<embed>、<img>、<object> 以及 <video>):

          屬性 值 描述

          onabort script 在退出時運行的腳本。

          oncanplay script 當文件就緒可以開始播放時運行的腳本(緩沖已足夠開始時)。

          oncanplaythrough script 當媒介能夠無需因緩沖而停止即可播放至結尾時運行的腳本。

          ondurationchange script 當媒介長度改變時運行的腳本。

          onemptied script 當發生故障并且文件突然不可用時運行的腳本(比如連接意外斷開時)。

          onended script 當媒介已到達結尾時運行的腳本(可發送類似“感謝觀看”之類的消息)。

          onerror script 當在文件加載期間發生錯誤時運行的腳本。

          onloadeddata script 當媒介數據已加載時運行的腳本。

          onloadedmetadata script 當元數據(比如分辨率和時長)被加載時運行的腳本。

          onloadstart script 在文件開始加載且未實際加載任何數據前運行的腳本。

          onpause script 當媒介被用戶或程序暫停時運行的腳本。

          onplay script 當媒介已就緒可以開始播放時運行的腳本。

          onplaying script 當媒介已開始播放時運行的腳本。

          onprogress script 當瀏覽器正在獲取媒介數據時運行的腳本。

          onratechange script 每當回放速率改變時運行的腳本(比如當用戶切換到慢動作或快進模式)。

          onreadystatechange script 每當就緒狀態改變時運行的腳本(就緒狀態監測媒介數據的狀態)。

          onseeked script 當 seeking 屬性設置為 false(指示定位已結束)時運行的腳本。

          onseeking script 當 seeking 屬性設置為 true(指示定位是活動的)時運行的腳本。

          onstalled script 在瀏覽器不論何種原因未能取回媒介數據時運行的腳本。

          onsuspend script 在媒介數據完全加載之前不論何種原因終止取回媒介數據時運行的腳本。

          ontimeupdate script 當播放位置改變時(比如當用戶快進到媒介中一個不同的位置時)運行的腳本。

          onvolumechange script 每當音量改變時(包括將音量設置為靜音)時運行的腳本。

          onwaiting script 當媒介已停止播放但打算繼續播放時(比如當媒介暫停已緩沖更多數據)運行腳本


          主站蜘蛛池模板: 亚洲狠狠狠一区二区三区| 国99精品无码一区二区三区| 中文字幕一区二区三区乱码| 国产电影一区二区| 久久精品国产第一区二区| 亚洲日韩AV一区二区三区中文 | 日韩精品一区二区三区不卡| 蜜桃无码一区二区三区| 亚洲一区二区三区影院 | 亚洲A∨精品一区二区三区| 无码人妻一区二区三区免费手机| 久久国产一区二区| 亚洲中文字幕无码一区二区三区| 国产色精品vr一区区三区| 在线一区二区三区| 免费无码一区二区三区蜜桃大| 国产精品揄拍一区二区| 91精品福利一区二区三区野战| 亚洲AV综合色区无码一区| 精品视频一区二区三区在线观看| 乱人伦一区二区三区| 人妻无码一区二区视频| 亚洲国产精品一区二区第四页 | 国产一区二区免费| 国产在线一区二区三区| 国产一区二区精品久久| 人妻少妇精品视频一区二区三区 | 久久久91精品国产一区二区三区| 本免费AV无码专区一区| 熟妇人妻系列av无码一区二区| 激情内射日本一区二区三区| 曰韩精品无码一区二区三区| 久久一本一区二区三区| 亚洲国产视频一区| 国产精品va一区二区三区| 国产成人久久精品麻豆一区| 亚洲中文字幕无码一区二区三区 | 日韩精品一区二区三区中文 | 无码精品蜜桃一区二区三区WW| 一区二区三区精品高清视频免费在线播放| 天码av无码一区二区三区四区|