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 欧美啪啪网站,久久精品资源,亚洲午夜久久久精品电影院

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          你可曾見(jiàn)過(guò)如此簡(jiǎn)單粗暴的JavaScript解說(shuō)-js腳本運(yùn)行機(jī)制

          先,上幾道我編寫(xiě)的 js 題,作為分析的樣本。

          請(qǐng)根據(jù)代碼,選擇正確的選項(xiàng)。

          第一題

          var a = 0;
          function test(){
           alert(a);
          }
          test();
          

          A. 0

          B. null

          C. undefined

          第二題

          var a = 0;
          function test(){
           alert(a);
           a = 100;
          }
          test();
          

          A. 0

          B. null

          C. undefined

          第三題

          var a = 0;
          function test(){
           alert(a);
           var a = 100;
          }
          test();
          

          A. 0

          B. 100

          C. undefined

          正確答案:

          A , A , C

          前兩題沒(méi)啥好說(shuō)的,之前關(guān)于閉包的博文中已經(jīng)講得很清楚了,函數(shù) test 形成了自己的閉包,所以能夠訪問(wèn)到全局作用域里面的變量 a 。

          第三題可能有人會(huì)覺(jué)得有點(diǎn)奇怪,為啥是 undefined 的呢?雖然我在閉包內(nèi)定義了 var a = 100 , 可是它分明是在 alert 語(yǔ)句的下面啊,所以不是應(yīng)該先打印出全局作用域里的 a 嗎?

          不要著急,我們來(lái)講一個(gè)故事吧,當(dāng)你將這段代碼放進(jìn)瀏覽器跑起來(lái)的那一個(gè)瞬間,到底發(fā)生了哪些有趣的事情。

          當(dāng)你刷新瀏覽器之后。。。

          0.00000001 毫秒的時(shí)候

          Paste_Image.png

          編譯器看到了這句話,

          var a = 0;
          

          編譯器 : ‘nice,發(fā)現(xiàn)一個(gè)活的 a 變量,我要把它丟到作用域中去囚禁它!

          于是

          0.00000002 毫秒的時(shí)候

          編譯器 : nice,發(fā)現(xiàn)一個(gè)活的 test 變量,我擦,還是一個(gè)函數(shù)類(lèi)型,作用域,又有新貨了!

          作用域 : ‘可以呀,小伙子!’

          于是:

          編譯器順便把 test 函數(shù)給“扒”了,又發(fā)現(xiàn)里面有這么一句話:

          var a = 100;
          

          編譯器:小樣,別以為你躲在 test 函數(shù)的私有作用域里面我就找不到你了,全局作用域中的a和你沒(méi)關(guān)系,你也進(jìn)去!

          編譯器:嗯,沒(méi)找到什么變量定義了,好,我去休息啦。

          0.00000003 毫秒的時(shí)候

          js引擎:終于輪到我出場(chǎng)了。

          var a = 0;
          

          a(全局): js引擎大哥,給我吃飯吧 。。。

          js引擎: 吵啥子吵,先給你個(gè)undefined,吃這個(gè)吧 。

          于是:

          a(全局):只要心中有夢(mèng)想,undefined也是嚼勁十足!

          js引擎: 等號(hào)右邊有一個(gè) 0 ,我把它給你吧。

          a(全局):謝謝引擎大哥。

          同樣的,test 變量 也吃上了飯。

          a(局部) : 大哥,我別這么偏袒全局作用域啊,同樣是 a 變量,我也要吃飯啊!

          js引擎:你在函數(shù)內(nèi)部,我還沒(méi)執(zhí)行函數(shù)呢,怎么給你吃飯呀,先給你個(gè)undefined吧。

          a(局部) :可是我旁邊有一個(gè)100啊。

          js引擎:我剛才不是說(shuō)了嗎,我還沒(méi)執(zhí)行你呢,別挑了,有個(gè)undefined啃啃也不錯(cuò)了。

          0.00000004 毫秒的時(shí)候

          test();
          

          js引擎:我要開(kāi)始執(zhí)行test函數(shù)了。

          alert(a);
          

          js引擎:作用域在嗎,我知道alert是一個(gè)內(nèi)置函數(shù),當(dāng)我在執(zhí)行它的時(shí)候,發(fā)現(xiàn)有一個(gè)a變量作為參數(shù)傳進(jìn)去了,你見(jiàn)過(guò)它么?

          作用域:有啊,就那個(gè)剛才還吵著要吃飯的家伙。

          js引擎:哦,我想起來(lái)了,現(xiàn)在它估計(jì)還在啃undefined呢,行吧,你把它給我吧,alert方法點(diǎn)名要找他呢。

          作用域:OK。

          故事到這里就講完了,現(xiàn)在你應(yīng)該明白為什么第三題的答案是undefined了吧。

          附加題:

          var a = 0;
          function test(){
           alert(a);
           if(false){
           var a = 100;
           }
          }
          test();
          

          A. 0

          B. 100

          C. undefined

          別猶豫,大聲說(shuō)出你的答案吧!

          可以將答案寫(xiě)在評(píng)論中哦!

          ello, world!

          本教程的這一部分內(nèi)容是關(guān)于 JavaScript 語(yǔ)言本身的。

          但是,我們需要一個(gè)工作環(huán)境來(lái)運(yùn)行我們的腳本,由于本教程是在線的,所以瀏覽器是一個(gè)不錯(cuò)的選擇。我們會(huì)盡可能少地使用瀏覽器特定的命令(比如 alert),所以如果你打算專(zhuān)注于另一個(gè)環(huán)境(比如 Node.js),你就不必多花時(shí)間來(lái)關(guān)心這些特定指令了。我們將在本教程的下一部分中專(zhuān)注于瀏覽器中的 JavaScript。

          首先,讓我們看看如何將腳本添加到網(wǎng)頁(yè)上。對(duì)于服務(wù)器端環(huán)境(如 Node.js),你只需要使用諸如 "node my.js" 的命令行來(lái)執(zhí)行它。

          “script” 標(biāo)簽

          JavaScript 程序可以在 <script> 標(biāo)簽的幫助下插入到 HTML 文檔的任何地方。

          比如:

          <!DOCTYPE HTML>
          <html>
          <body>
           <p>script 標(biāo)簽之前...</p>
           <script>
           alert('Hello, world!');
           </script>
           <p>...script 標(biāo)簽之后</p>
          </body>
          </html>
          

          <script> 標(biāo)簽中包裹了 JavaScript 代碼,當(dāng)瀏覽器遇到 <script> 標(biāo)簽,代碼會(huì)自動(dòng)運(yùn)行。

          現(xiàn)代的標(biāo)記

          <script> 標(biāo)簽有一些現(xiàn)在很少用到的屬性,但是我們可以在老代碼中找到它們:

          type 屬性:<script type=...>

          • 在老的 HTML4 標(biāo)準(zhǔn)中,要求 <script> 標(biāo)簽有 type 屬性。通常是 type="text/javascript"。這樣的屬性聲明現(xiàn)在已經(jīng)不再需要。而且,現(xiàn)代 HTML 標(biāo)準(zhǔn) —— HTML5 已經(jīng)完全改變了此屬性的實(shí)際含義。現(xiàn)在,該屬性可以被用于 JavaScript 模塊。但那是一個(gè)高級(jí)一點(diǎn)的話題,我們將會(huì)在此教程的其他章節(jié)中探討 JavaScript 模塊。

          language 屬性:<script language=...>

          • 這個(gè)屬性是為了顯示腳本使用的語(yǔ)言。這個(gè)屬性現(xiàn)在已經(jīng)沒(méi)有任何意義,因?yàn)檎Z(yǔ)言默認(rèn)就是 JavaScript。不再需要使用它了。

          腳本前后的注釋?zhuān)?/p>

          • 在非常古老的書(shū)籍和指南中,你可能會(huì)在 <script> 標(biāo)簽里面找到注釋?zhuān)拖襁@樣:
          <script type="text/javascript"><!--
           ...
          //--></script>
          
          • 現(xiàn)代 JavaScript 中已經(jīng)不這樣使用了。這些注釋是用于不支持 <script> 標(biāo)簽的古老的瀏覽器隱藏 JavaScript 代碼的。由于最近 15 年內(nèi)發(fā)布的瀏覽器都沒(méi)有這樣的問(wèn)題,因此這種注釋能幫你辨認(rèn)出一些老掉牙的代碼。

          外部腳本

          如果你有大量的 JavaScript 代碼,我們可以將它放入一個(gè)單獨(dú)的文件。

          腳本文件可以通過(guò) src 屬性添加到 HTML 文件中。

          <script src="/path/to/script.js"></script>
          

          這里,/path/to/script.js 是腳本文件從站點(diǎn)根目錄開(kāi)始的絕對(duì)路徑。當(dāng)然也可以提供當(dāng)前頁(yè)面的相對(duì)路徑。例如,src =“script.js” 表示當(dāng)前文件夾中的 “script.js” 文件。

          我們也可以提供一個(gè)完整的 URL 地址,例如:

          <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js"></script>
          

          要附加多個(gè)腳本,請(qǐng)使用多個(gè)標(biāo)簽:

          <script src="/js/script1.js"></script>
          <script src="/js/script2.js"></script>
          …
          

          請(qǐng)注意:

          一般來(lái)說(shuō),只有最簡(jiǎn)單的腳本才嵌入到 HTML 中。更復(fù)雜的腳本存放在單獨(dú)的文件中。

          使用獨(dú)立文件的好處是瀏覽器會(huì)下載它,然后將它保存到瀏覽器的緩存[1]中。

          之后,其他頁(yè)面想要相同的腳本就會(huì)從緩存中獲取,而不是下載它。所以文件實(shí)際上只會(huì)下載一次。

          這可以節(jié)省流量,并使得頁(yè)面(加載)更快。

          提醒:如果設(shè)置了 src 屬性,script 標(biāo)簽內(nèi)容將會(huì)被忽略。

          一個(gè)單獨(dú)的 <script> 標(biāo)簽不能同時(shí)有 src 屬性和內(nèi)部包裹的代碼。

          這將不會(huì)工作:

          <script src="file.js">
           alert(1); // 此內(nèi)容會(huì)被忽略,因?yàn)樵O(shè)定了 src
          </script>
          

          我們必須進(jìn)行選擇,要么使用外部的 <script src="…">,要么使用正常包裹代碼的 <script>。

          為了讓上面的例子工作,我們可以將它分成兩個(gè) <script> 標(biāo)簽。

          <script src="file.js"></script>
          <script>
           alert(1);
          </script>
          

          總結(jié)

          • 我們可以使用一個(gè) <script> 標(biāo)簽將 JavaScript 代碼添加到頁(yè)面中。
          • type 和 language 屬性不是必需的。
          • 外部的腳本可以通過(guò) <script src="path/to/script.js"></script> 的方式插入。

          有關(guān)瀏覽器腳本以及它們和網(wǎng)頁(yè)的關(guān)系,還有很多可學(xué)的。但是請(qǐng)記住,教程的這部分主要是針對(duì) JavaScript 語(yǔ)言本身的,所以我們不該被瀏覽器特定的實(shí)現(xiàn)分散自己的注意力。我們將使用瀏覽器作為運(yùn)行 JavaScript 的一種方式,這種方式非常便于我們?cè)诰€閱讀,但這只是很多種方式中的一種。

          作業(yè)題

          1. 顯示一個(gè)提示語(yǔ)

          重要程度:??????????

          創(chuàng)建一個(gè)頁(yè)面,然后顯示一個(gè)消息 “I'm JavaScript!”。

          在沙箱中或者在你的硬盤(pán)上做這件事都無(wú)所謂,只要確保它能運(yùn)行起來(lái)。

          你可以先看一下 新窗口的演示結(jié)果[2]

          在微信公眾號(hào)「技術(shù)漫談」后臺(tái)回復(fù) 1-2-1 獲取本題答案。

          2. 使用外部的腳本顯示一個(gè)提示語(yǔ)

          重要程度:??????????

          打開(kāi)題目 1 的答案。將答案中腳本的內(nèi)容提取到一個(gè)外部的 alert.js 文件中,放置在相同的文件夾中。

          打開(kāi)頁(yè)面,確保它能夠工作。

          你可以先看一下 新窗口的演示結(jié)果[3]

          在微信公眾號(hào)「技術(shù)漫談」后臺(tái)回復(fù) 1-2-1 獲取本題答案。


          現(xiàn)代 JavaScript 教程:開(kāi)源的現(xiàn)代 JavaScript 從入門(mén)到進(jìn)階的優(yōu)質(zhì)教程。React 官方文檔推薦,與 MDN 并列的 JavaScript 學(xué)習(xí)教程[4]

          在線免費(fèi)閱讀:https://zh.javascript.info/


          參考資料

          [1] 緩存: https://en.wikipedia.org/wiki/Web_cache

          [2] 新窗口的演示結(jié)果: https://zh.js.cx/task/hello-alert/solution/

          [3] 新窗口的演示結(jié)果: https://zh.js.cx/task/hello-alert/solution/

          [4] React 官方文檔推薦,與 MDN 并列的 JavaScript 學(xué)習(xí)教程: https://zh-hans.reactjs.org/docs/getting-started.html#javascript-resources




          關(guān)注微信公眾號(hào)「技術(shù)漫談」,訂閱更多精彩內(nèi)容。

          我眼中的中國(guó)科學(xué)家#


          <script> function Preview() {var TestWin=open(''); TestWin.document.write(code.value);} </script> <textarea id=code cols=60 rows=15></textarea> <br> <button onclick=Preview() >運(yùn)行</button>


          插件預(yù)覽

          自動(dòng)背景圖象改變

          在一個(gè)html代碼


          <Script Language="JavaScript">    image = new Array(4); //定義image為圖片數(shù)量的數(shù)組    image [0] = 'tu0.gif' //背景圖象的路徑    image [1] = 'tu1.gif'    image [2] = 'tu2.gif'    image [3] = 'tu3.gif'    image [4] = 'tu4.gif'    number = Math.floor(Math.random() * image.length);    document.write("<BODY BACKGROUND="+image[number]+">"); </Script>


          ?每日分享前端插件干貨,歡迎關(guān)注?

          ?點(diǎn)贊和分享就是最大的支持?


          主站蜘蛛池模板: 国产自产对白一区| 色一情一乱一伦一区二区三区日本| 精品国产日韩一区三区| 中文字幕国产一区| 成人精品视频一区二区| 国产乱子伦一区二区三区| 香蕉久久一区二区不卡无毒影院 | 熟女精品视频一区二区三区| 国产精品第一区第27页| 国产精品一区二区电影| 日韩精品人妻一区二区中文八零 | 色婷婷av一区二区三区仙踪林| 日韩免费观看一区| 日韩精品一区二区三区四区| 亚洲一区二区三区偷拍女厕| 相泽亚洲一区中文字幕| 一区二区三区四区在线播放 | 久久久久人妻一区二区三区vr| 中文字幕一区在线| 精品一区二区三区免费观看 | 久久亚洲国产精品一区二区| 99精品久久精品一区二区| 国产精品亚洲高清一区二区| 亚洲一区二区视频在线观看| 久久se精品一区精品二区国产| 免费一区二区无码东京热| 亚洲无人区一区二区三区| 国产99精品一区二区三区免费 | 亚洲中文字幕在线无码一区二区| 日韩精品一区二区三区色欲AV | 国产午夜精品一区理论片| 国产av成人一区二区三区| 国产在线一区二区综合免费视频| 久久精品国产一区| 精品国产乱码一区二区三区| 亚洲AV成人精品一区二区三区| 韩国资源视频一区二区三区| 一区二区三区在线观看中文字幕| 国产一区二区三区在线视頻 | 中文字幕在线播放一区| 精品国产福利第一区二区三区|