5天揭秘js高級技術-第一天

来源:http://www.cnblogs.com/willingtolove/archive/2016/03/31/5269666.html
-Advertisement-
Play Games

一、基礎雜記 1. document.write() 1 <script type="text/javascript"> 2 document.write('<h2>我愛你</h2>'); 3 </script> 2. 變數必須聲明才能使用: 使用var聲明:局部變數; 沒有使用var聲明:全局變數 ...


一、基礎雜記

1. document.write()

1 <script type="text/javascript">
2     document.write('<h2>我愛你</h2>');
3 </script>
document.write

2. 變數必須聲明才能使用:

  使用var聲明:局部變數;

  沒有使用var聲明:全局變數;

3. 數據類型:

  String:字元串  ‘’ ,“”;

  Number:數字;

  Boolean:布爾型;

  Undefined:未定義,只是聲明瞭變數,但沒有賦值;

  Null:空;

  Object:對象(數組,函數等);

 4. prompt:

1 var num=prompt("請輸入:");//彈出輸入對話框,並將輸入值傳遞給num;
2 alert(num);
prompt

 二、函數:

 1. 引用傳遞實例:

1 //按引用傳遞的對象函數實例:
2 var p1=new Object();
3 function display(obj){
4     obj.name='lisi';
5 }
6 p1.name='zhangsan';
7 display(p1);
8 alert(p1.name);//結果:'lisi'
引用傳遞

 2. 匿名函數:

  1)函數名就是首地址;

 1     <script type="text/javascript">
 2         //匿名函數
 3         var i=0;
 4         function display(){
 5             alert('hello!');
 6         }
 7         i=display();//變數i的值為函數的返回值,且立刻執行display這個函數,'()'有立刻執行的作用;
 8         i=display;//變數i指向了這個函數的首地址;
 9         i();
10     </script>

   2)匿名函數演變:

1         var j=function display1(){//此時的display名稱已經沒有意義;
2             alert('nihao!');
3         }
4         j();
5         var k=function(){
6             alert('nihao!');
7         };
8         k();

   3)自調用匿名函數:

 1 <script type="text/javascript">
 2 //沒有任何變數指向這個函數的首地址;
 3 //用()將函數括起來,相當於得到函數的收地址,後面的()相當於立即執行這個函數;
 4 //自調用匿名函數也可以傳遞參數
 5     (function(index){
 6         alert('hello,js:'+index);
 7     })(10);
 8 
 9 </script>
10 //結果:10;    

   這種寫法的好處:可以避免代碼庫中的函數重命名的問題,並且以上代碼只會在運行時執行一次,一般用作初始化工作;

3. 全局變數和局部變數:

  在函數內部定義(用var定義,如果沒有用var定義,也是全局的變數)的變數是局部變數,否則是全局變數;

 1     <script type="text/javascript">
 2         var i=1;//全局
 3         j=2;//全局
 4         function play(){
 5             var k=3;//局部
 6             p=4;//全局
 7         }
 8         play();
 9         alert(p);//結果:4
10     </script>

   為什麼沒有var定義的變數就是全局的呢?

  是因為,在js中,如果某個變數沒有var聲明,會自動到上一層作用域中區找這個變數的聲明語句,如果找到,就使用,如果沒有找到,繼續向上查找,一直查找到全局作用域為止,如果全局作用域中仍然沒有這個變數的 聲明語句,那麼會自動在全局作用域進行聲明,這個就是js中的作用域鏈;

4. 作用域鏈:內部作用域訪問外部作用域;(外部作用域訪問內部作用域:閉包)

 1     <script type="text/javascript">
 2         var i=1;
 3         function fn1(){
 4             var i=10;
 5             function fn2(){
 6                 i=100;
 7                 function fn3(){
 8                     i=1000;
 9                 }
10                 fn3();
11             }
12             fn2();
13         }
14         fn1();
15         alert(i);//結果:1
16     </script>

 5. arugments的使用:

  在一個函數內部,可以使用arguments屬性,它表示函數的形參列表,它是以數組形式體現的;

  如果定義時,參數個數不確定,可以通過arguments這個屬性來保存所有實參;

 

 1 <script type="text/javascript">
 2         function display(){
 3             //沒有定義形參,那麼所有形參會自動存放到arguments這個屬性數組中;
 4             for(var i=0;i<arguments.length;i++){
 5                 document.write(arguments[i]+',');
 6             }
 7 
 8         }
 9         display('lisi','zhangsan','wangwu');//結果:'lisi','zhangsan','wangwu'
10 </script>

五、js的執行過程

  js中的script是分段執行的;

  執行過程:

    1)讀取第一個代碼段

    2)編譯:

      聲明變數,聲明函數,語法檢查,語義檢查,代碼優化...

      var i=10;

      var i;

    3)執行

    4)讀取第二個代碼段

    5)編譯

    6)執行

    .........

    結束

 1     <script type="text/javascript">
 2         //錯誤:i is not defined
 3         alert(i);
 4     </script>
 5     <script type="text/javascript">
 6         //彈出:undefined
 7         //原因:首先編譯,這是已經聲明瞭變數j,這時它是undefined,接下來是執行alert,此時,j還沒有賦值,所以...
 8         alert(j);
 9         var j=10;
10         //彈出:10
11         //原因:此時j應經賦值;
12         alert(j);
13     </script>

六、js中的常見錯誤:

  編譯錯誤和運行錯誤。

  1. 兩種錯誤導致的結果:相同點

  (錯誤後面的js語句都不會有效果)

1     <script type="text/javascript">
2         alert(n);
3         alert("hello");
4     </script>
5     <script type="text/javascript">
6         var n=10;
7         alert(n;
8         alert("hello");
9     </script>

  2.不同點:

    運行錯誤代碼段會彈出"hello1",因為執行完第2行,執行第3行時出錯;

    編譯錯誤代碼段不會彈出"hello2",因為編譯過程就已經出錯,就不會執行改代碼段了;

1     <script type="text/javascript">
2         alert("hello1");
3         alert(m);//運行錯誤
4     </script>
5     <script type="text/javascript">
6         alert("hello2");
7         var n=10;
8         alert(n;//編譯錯誤
9     </script>

   總結:

    編譯時,如果發生錯誤,那麼當前代碼段會停止執行,而執行後面代碼段的內容;

    運行時,如果發生錯誤,但前面的代碼已經執行完畢,所以不會影響前面的內容;

    無論是哪種錯誤,不會影響後面的代碼段的執行;

 

 1     <script type="text/javascript">
 2         alert(i);//運行錯誤
 3         var first=10;
 4         function play(){
 5             alert("play");
 6         }
 7     </script>
 8     <script type="text/javascript">
 9         alert(first);
10         play();
11     </script>

  結果:彈出undefined,彈出play;

 1     <script type="text/javascript">
 2         var first=10;
 3         function play(){
 4             alert("play");
 5         }
 6         alert(i;  //編譯錯誤
 7 
 8     </script>
 9     <script type="text/javascript">
10         alert(first);
11         play();
12     </script>

  結果:什麼也沒彈出;

  總結:如果代碼段中出現編譯錯誤,那麼該代碼段中所有已經聲明的全部無效;

  JS執行流程圖:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 經查找一些資料,並且親自實驗之後得出: r+:打開已存在的文件時,游標位於開頭,文件可讀,可寫, 寫數據時,由於游標位於開頭,所以會覆蓋原有數據 w+:打開的文件已存在時,將覆蓋原文件 a+:打開已存在的文件時,游標位於文件尾,文件可讀,可寫 讀數據時,游標會回到開頭 ...
  • 基本介面:Collection 介面: List 實現類:ArrayList LinkedList 介面:Set(唯一,無序) 實現類:HashSet(哈希) TreeSetMap介面:Map 實現類:HashMap ArrayList類特點:長度可變,連續空間,任意類型,類型相同適用情況:適合多次 ...
  • 作為後端應用的開發者,我們經常開發、調試、測試完我們的應用併發布到生產環境,用戶就可以直接訪問到我們的應用了。但對於互聯網應用,在你的應用和用戶之間還隔著一層低調的或厚或薄的負載均衡層軟體,它們不顯山不露水默默的發揮著重要的作用,以至於我們經常忽略了它們的存在。因為負載均衡層通常不在一般開發人員的問 ...
  • 你是如何指定一個頁面的編碼的呢?你知道瀏覽器是怎麼識別編碼的嗎? 首先,一個很簡單的例子,用遇簡的HTML頁面來看看各瀏覽器下有什麼不同: 最簡HTML,<head>和<body>都沒有內容,伺服器也不給出具體的編碼聲明,直接從本地打開,各個瀏覽器下查看頁面的編碼: 從表格中可以看出,對於沒有使用任 ...
  • <input type="checkbox">: 1 2 3 4 5 2012歐洲杯"死亡之組"小組出線的國家隊是:<br> <input type="checkbox" name="nation" value="Germany">德國 <input type="checkbox" name="na ...
  • 一:結構 註意,1 必須是三張以上圖片,2 最外層carousel-wrap必須要有一個寬高 二:CSS 三:JS 基於JQ, 四:測試地址 http://game.feiliu.com/zk/new/plugin/default.html 五:demo源碼下載 http://files.cnblo ...
  • 前端開發命名規則很重要,但是網上的命名規則一大篇,下麵是我總結的一些常用的短語,希望能幫到大家,肯定不全,歡迎大家補充。 1.如果是模塊,可以這樣首碼: 彈出:pop 公共:global(縮寫:gb) 標題:title,tit 提示:hint 菜單:menu 信息:info 預覽:pvw 導航:na ...
  • 本文主要對GET與POST基本區別進行彙總並掌握,如有錯誤與遺漏之處,請指出。 文章出處:http://www.cnblogs.com/useryangtao/ 1. HTTP HTTP(即超文本傳輸協議)是現代網路中最常見和常用的協議之一,設計它的目的是保證客戶機和伺服器之間的通信。 HTTP 的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...