<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 出世 JavaScript出生在Netscape瀏覽器中,當時的網頁主要是丑陋的靜態文本以及簡單的圖片 那個時候,人們還在用Modem上網,網速只有28.8kbps 那個時候的人們在上網的時候有可能遇到下面這種問題,注冊用戶的時候填了一個表單,28s以后,服務器告訴他忘了選擇性別。 這種問題完全可以由瀏覽器來判定,而不需要把數據提交到千里之外的服務器才能發現。 所以開發一種腳本在瀏覽器中運行勢在必行。 不過JavaScript的發明者Brendan Eich沒有想到JavaScript會這么火,他只使用了10天時間就設計出來了。所以在一些細節上處理得不夠嚴謹 而且JavaScript本來叫LiveScript,但是為了向Java示好,LiveScript竟然被修改成了JavaScript,實際上這兩種語言沒有任何關系。 ## 成長 JavaScript無法讀取文件,因為他生活在瀏覽器 使用JavaScript寫的程序只能嵌入在HTML網頁里面。能做的就是操作HTML的DOM和瀏覽器 什么是DOM呢? 瀏覽器從服務器取到HTML以后,會展示成頁面,但是他的內部會把HTML組織成一個樹。這個樹就是DOM 例如: ``` <html> <head> <title>Sample Page</title> </head> <body> <p>hello world!</p> </body> </html> ``` DOM樹會長這樣: ![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180816111626.png?picgo) 有了DOM樹,JavaScript就可以定位到DOM樹中任意一個節點,然后對這個節點進行操作,比如隱藏節點、顯示節點、改變顏色、獲得文本值、改變文本的值,添加點擊事件等 而且這些操作可以立刻顯示出效果來,完全不用刷新網頁。 這些操作都是在內部完成的,HTML源碼不會改變。所以當你打開HTML源碼的時候,發現源碼與瀏覽器看到的效果不一致。 所以JavaScript可以做表單驗證,還功能控制瀏覽器比如打開窗口,獲得瀏覽器的名稱或者版本 ## 第一桶金 此時的JavaScript存在一個缺點:JavaScript只能在瀏覽器中運行,沒有辦法像Java那樣訪問網絡,也就沒有辦法調用服務器端的接口來獲取數據。 用戶只能通過GET或者POST向服務器發送請求,這個時候服務器返回的是整個頁面,而不是頁面中的一個片段,也就是整個頁面需要刷新一下,哪怕只是改變一個字 1998年IE5引入了一個新功能XMLHttpRequest,這個功能允許JavaScript向服務器發出接口調用 比如說拿用戶名和密碼,通過XMLHttpRequest去訪問服務器端的登陸接口URL,這個過程需要耗費比較長的時間,在這段時間里面,瀏覽器不需要等待反回結果。 而與由JavaScript等待數據傳輸返回,然后調用回傳函數,把DOM樹的某個節點更新一下,例如讓包含用戶名和密碼的登錄框消失,再加一個提示消息:登錄成功 如果服務器處理和網絡速度都夠快的話,用戶會發現,沒有刷新整個頁面就已經登錄了 這種方式可以使得網頁局部刷新, 讓用戶瀏覽網頁的體驗極佳, 尤其是 Google 地圖, Gmail 等應用讓互聯網應用火了起來。 ## JSON 后來有人把這種處理方式稱為AJAX(“Asynchronous Javascript And XML”(異步 JavaScript 和 XML)) 現在的問題是服務器返回了下面這端XML ``` <book> <isbn>978-7-229-03093-3</isbn> <name> 三體 </name> <author> 劉慈欣 </author> <introduction> 中國最牛的科幻書 </introduction> <price>38.00</price> </book> ``` 真正的數據很少,標簽卻很多。 JavaScript的語法中有個叫對象的東西,外層是一個花括號,內部是鍵值對,屬性由逗號隔開。 ``` var book = { "isbn": "978-7-229-03093-3", "name": "三體", "author": "劉慈欣", "introduction": "中國最牛的科幻書", "price": "38.00" } ``` 這種結構可以表達上面XML的內容 而且還支持數組 ``` var books = [ { "isbn": "978-7-229-03093-3", "name": "三體", "author": "劉慈欣", "introduction": "中國最牛的科幻書", "price": "38.00" }, { "isbn": "978-7-229-03094-1", "name": "我是一個線程", "author": "劉欣", "introduction": "一個線程的自述", "price": "0.0" } ] ``` 數據和對象都支持嵌套 更重要的是,不需要使用XML解析器去解析,可以直接拿來用 ``` books[0].name --> 返回 “三體” books[1].introduction --> 返回 “一個線程的自述” ``` ## 巔峰 HTML 負責結構, CSS 負責展示, 而我(加上 AJAX, JSON) 負責邏輯。 于是前端編程三劍客形成了。 ExtJS, prototype, JQuery 這些框架把前端編程推向另外一個高峰。 甚至出現了 AngularJS 這樣的奇葩,實現了 SPA(單一頁面應用程序), 實在是難于想象。 現在JavaScript可以在瀏覽器端實現MVC,只需要在服務器端通過接口給JavaScript提供數據就行。 那么JavaScript可以移植到服務器端嗎? 我們知道服務器端好處在于資源無限,缺點在于多線程編程,很多東西都需要加鎖,基本上一個請求就是一個線程來處理,遇到數據庫操作,線程必須等待。 那能修改成異步的嗎?至少對Java來說比較難,因為已經積重難返了。 那么怎么把JavaScript放到服務器端呢? 首先得把瀏覽器端運行環境移到服務器端,而且執行速度還得足夠快。 原來的引擎一直不合格,知道Chrome V8出現才解決問題。 其次還得繞開線程遇到IO、數據庫、網絡這種耗時操作還在等待的問題,必須搞成異步處理 2009年Ryan Dahl把JavaScript放到了服務器端,這就是Node.js 這樣前端后端都可以使用JavaScript,優勢就很明顯了,前端后端采用同樣的開發語言。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看