摘要:方法用于刪除原數組中的一部分元素,并可以在被刪除的位置添加新數組成員,返回值是被刪除的元素。遞歸函數函數內部調用函數自身,稱之為遞歸。在函數內使用聲明的變量是局部變量,是人為的聲明。
前言
這個筆記不知道什么時候記下的反正很有意思,很基礎,很理論。
JavaScript學習筆記1 第一章 JavaScript概述 1.1 什么是JavaScriptJavaScript是一種輕量級的腳本語言,也是一種嵌入式(embedded)語言,是一種對象模型語言。
腳本語言又被稱為擴建的語言,或者動態語言,是一種編程語言,用來控制軟件應用程序,腳本通常以文本(如ASCII)保存,只在被調用時進行解釋或編譯,在依靠特定的宿主環境提供API來實現操作和效果。常見的宿主環境有瀏覽器,服務器環境(操作系統)。
嵌入式語言一句話就是不能獨立做事,插入到其他語言才能用的語言。1.2 使用方法 1.2.1 內部引用(標簽引入)
理論上
邏輯或解析圖
順序結構:從上而下
分支結構(選擇結構):if else if else 和switch。
if else 和 switch的區別?
if結構不僅可以判斷固定值, 還可以判斷范圍區間。switch結構只能判斷固定值情況。
3.循環結構:while,for,do while等
4.continue和break的區別;
continue:跳出當前循環,繼續下次循環。2.4 數組 2.4.1 數組的簡單使用break:跳出整個循環結構,也就相當于結束循環。
數組是一組有序數據的集合,在內存中表現為一段連續的內存地址。
數組的聲明也很簡單:
var arr=[1,2,3,4];var arr=new Array(1,2,3,4);
var arr=new Array(2); arr[0]=1;arr[1]=2;arr[2]=3;
多維數組:數組的元素也是一個數組,則父數組是多為數組。
var arr=[1,2,[3,4,5,[6,7]]];是個三維數組
獲取數組元素:通過下標獲取(數組[下標]),多為數組的話所有下標都寫上,不然只的到所在行的全部元素。
數組的遍歷:
最常用的通過for循環,根據循環語法,在循環之前先獲取數組長度
var arr=["Apple","Huawei","SumSung"]; var len=arr.length; for(var i=0;i for...in循環遍歷數組:for..in可以遍歷對象,也可以遍歷數組,畢竟數組也是個特殊的對象。var arr=["Apple","Huawei","SumSung"]; for(var i in arr){ //每次遍歷是,系統自動將元素的索引下標放入變量i中 console.log(arr[i]); }2.4.2 數組對象的屬性及方法(很重要,背下來)length屬性:返回數組的成員數量即數組的長度。數組對象的常用方法:
push方法:用于在數組的末端添加一個或多個元素,并返回新元素的數組長度。注意push方法會改變原數組。
var a=[]; a.push(1); alert(a);//1 a.push("a"); console.log(a);//Array[1,"a"] a.push(true,{}); console.log(a);//Array [ 1, "a", true, {} ]pop方法:用于刪除數組的最好一個元素,并返回該元素。注意,pop方法會改變原數組
var a=["a","b","c"]; var b=a.pop();//c console.log(a);//Array["a","b"] console.log(b);//cjoin方法:用于參數分隔符,將所有數組成員一個字符串返回,如果不提供參數,默認用逗號分隔。不改變原數組。
var a=[1,2,3,4]; var b=a.join("|"); console.log(b);//1|2|3|4 var c=a.join(); console.log(c);concat方法:用于多個數組的合并,它將新數組的成員添加到原數組的尾部,然后返回一個新的數組,原數組不變。
var a=["hello"]; var b=["world"]; var d=a.concat(b); console.log(d);//Array [ "hello", "world" ] console.log(d.concat(["!"],["A"]));//Array [ "hello", "world", "!", "A" ]shift方法:用于刪除數組的第一元素,并返回給該元素。注意改變原數組。
var a=[1,2,3]; var b=a.shift(); console.log(a);//Array [ 2, 3 ] console.log(b);//1unshift方法:用于在數組的第一個位置添加一個元素,并返回新加元素后的數組長度。注意該方法會改變原數組。
var a=[1,2,3]; var b=a.unshift(5); console.log(a);//Array [ 5, 1, 2, 3 ] console.log(b);//4reverse方法:用于顛倒數組中的元素,返回改變后的數組。注意,該方法將改變原數組。
var a=[1,2,3]; var b=a.reverse(); console.log(a);//Array [ 3,2,1 ] console.log(b);//Array [ 3,2,1 ]slice方法:用于提取原數組中的一部分元素(相當于截取),返回一個新數組,原數組不變。它的第一個參數為起始位置(從0開始) , 第二個參數為終止位置(但該位置的元素本身不包括在內) 。如果省略第二個參數, 則一直返回到原數組的最后一個成員。
var a = ["a","b","c","d","e"]; console.log(a.slice(0)) // ["a", "b", "c", "d", "e"] console.log(a.slice(1)) // ["b", "c", "d", "e"] console.log(a.slice(1,3)); // ["b", "c"]splice方法:用于刪除原數組中的一部分元素,并可以在被刪除的位置添加新數組成員,返回值是被刪除的元素。注意,該方法會改變原數組。splice的第一個參數是刪除的起始位置, 第二個參數是被刪除的元素個數
var a = ["a", "b", "c", "d", "e", "f"]; var a1 = a.splice(4, 2); console.log(a1); //Array["e", "f"] console.log(a); // Array["a", "b", "c", "d"] var b = ["a", "b", "c", "d", "e", "f"]; var a2 = b.splice(1, 2, 1, 2); console.log(a2); //["b", "c"] // console.log(b);//["a", 1, 2, "d", "e", "f"]forEach方法:用于遍歷數組的所有成員,執行某種操作;forEach方法的參數是一個函數,數組的所有成員會依次執行該函數,它接受三個參數,分別是當前位置的值,當前位置的編號和整個數組
var a = ["a", "b", "c", "d", "e", "f"]; a.forEach(function(v,k,h){ console.log(v); console.log(k); console.log(h); }); //第三個參數可以寫可以不寫,它帶便遍歷次數第三章 函數 3.1 函數概述函數就是制作工具的工具,比如計算器就是一個工具,而制作計算器的工具就是函數,也就是制作工具的工具。一次定義多次使用。
用函數的好處:節省代碼的數量,減少代碼量,使代碼可以重復使用,節省空間,節省時間,使程序代碼具有結構化,模塊化,后期維護更友好等等很多好處
3.2 函數基本使用 3.2.1 函數的聲明及調用多次聲明同一個函數的話,最后一次聲明的函數會覆蓋前面的函數,前面的聲明在任何時候都是無效的。
遞歸函數:函數內部調用函數自身,稱之為遞歸。只要是遞歸必須的有判斷,不然它是個死循環,用別的函數解決的問題最好別用遞歸解決,遞歸占內存大,不友好。
function Recursion(x){ if(x>1){ return x+Recursion(x-1); }else{ return 1; } } console.log(Recursion(100);3.2.2 函數的參數及返回值函數的參數有形參和實參:
形參就是函數聲明時需要接受的參數,可以理解成暫時的占位符,并無實際意義實參就是調用函數是傳遞進函數的具體的實際數據,也就是給占替代位符的的值
函數體內部的return語句:表示將數據返回給調用者。return后面即使有語句,也不會執行,也就是return后面不執行.return語句可有可無,沒有則不反悔任何值或者說返回undefined。
函數中的arguments對象:arguement是函數調用時的實參列表;只是實參列表
function Argu(a){ console.log(arguments); } Argu(1,2,3);aruguments對象帶有一個callee屬性,返回他所對應的原函數。callee代表當前運行的函數
function Argu(a){ console.log(arguments.callee); } Argu(1,2,3);3.2.3 自調用匿名函數函數可以沒有名字嗎?當然可以:(function(){})();
為什么要有自調用匿名函數?
因為有名函數有缺點,可能運行時會出現命名沖突,如果在編寫程序時,直接采取自調用匿名函數,則不會產生命名沖突問題。市場上很多框架,如JQuery.js,ext.js等都是采用匿名函數進行封裝。使用自調用匿名函數結合aruguments對象實現遞歸:
var a = (function (n) { if (n > 1) { return n + arguments.callee(n - 1); } else { return 1; } })(100); console.log(a);3.3 函數作用域 3.3.1 定義作用域指的是變量存在的范圍。JavaScript中作用域有兩種局部作用域和全局作用域。
局部作用域:變量只在函數的內部存在。在函數內使用var聲明的變量是局部變量,是人為的聲明。全局作用域:變量在整個程序中存在,所有地方都可以讀取。全局變量一個是函數外聲明的變量;還有一個是函數內不使用var的變量(僅僅帶便變量被賦值),也就是如果不是人為定義,系統會定義,系統定義的變量在整個程序中存在,不加var會污染全局。
function a(){ b=1 } a(); console.log(b);局部變量會替代全局變量:函數內部聲明的變量會在函數內部區域覆蓋同名的全局變量。
這說明javascript的函數在查找自身函數定義開始,從“內”向“外”查找。var a=3; function fun(){ var a=2; console.log(a); } fun();//2 console.log(a);//3如果函數內部不使用var關鍵字,那么函數內部的賦值將會影響全局變量。實際上,JavaScript默認喲偶一個全局的對象窗口,全局作用域的變量實際上是被綁定到窗口對象上的一個屬性,因此,直接訪問全局對象a和訪問window.a是完全一樣的
var a=3; function fun(){ a=2; console.log(a); } fun();//2 console.log(a);//2作用域解釋圖:
3.3.2 變量提升JavaScript的函數定義有個特點,他會先掃描整個函數體呃逆的語句,把所有聲明的變量提升到函數的頂部,注意只是把聲明提升了,并不會提升變量的賦值。
function fun(){ console.log(a);//undefined var a=2; //JavaScript解析引擎來說相當于 /** *var a; *var b=1+a; *alert(b); *a=2; **/ } fun();3.3.3 函數本身的作用域函數本身也是一個值,也有自己的作用域;函數的作用域與變量一樣,就是它聲明時所作的作用域,與其運行時所在的作用域無關
函數執行時的作用域是定義時的作用域,而不是調用時的作用域。
var a=3; var x=function(){ console.log(a); } function f(){ var a=4; x(); } f();//3再看這個:
var x=function(){ console.log(a); } function y(f){ var a=2; f(); } y(x);//ReferenceError: a is not defined //函數執行時的作用域是定義時的作用域,而不是調用是的,所以,這代碼運行結果是這樣。繼續看代碼
function fun(){ var a=2; function bar(){ console.log(a); } return bar; } var a=4; var f=fun(); f();//2第四章 語法分析 4.1 JavaScript代碼的編譯以及執行JavaScript代碼運行,分為編譯階段和執行階段:
編譯階段:聲明變量,聲明函數(display),語法檢查等操作,一旦出錯不會執行下一階段,除了錯誤提示不輸出別的內容執行階段:變量的賦值,函數的調用,代碼的執行等操作,這一階段出錯的話出錯之前的內容執行;
4.2 script代碼段在html中是一段獨立的代碼,這一段代碼出錯不會影響下一個代碼段的執行;不管前面的代碼段錯誤出現在編譯階段還是執行階段都不會影響下一段代碼的執行。
為什么呢?
雖然script代碼段在一個頁面,但是script代碼并不是一起執行,而是分開解析與執行。JavaScript解析引擎從上而下讀取第一個代碼段-->放入內存-->編譯階段-->執行階段-->下一個JavaScript代碼段-->放入內存...等操作;
總之一句話,JavaScript解析引擎執行完一段代碼再執行下一段代碼,每一段代碼都是獨立的存在。因此,前一個代碼無論發生什么錯誤都不會影響下一個代碼段的執行
看圖:
參考資料W3school
菜鳥教程
JavaScript權威指南(第6版)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28445.html
摘要:方法用于刪除原數組中的一部分元素,并可以在被刪除的位置添加新數組成員,返回值是被刪除的元素。遞歸函數函數內部調用函數自身,稱之為遞歸。在函數內使用聲明的變量是局部變量,是人為的聲明。 前言 這個筆記不知道什么時候記下的反正很有意思,很基礎,很理論。 JavaScript學習筆記1 第一章 JavaScript概述 1.1 什么是JavaScript JavaScript是一種輕量級的腳...
摘要:基礎語法鞏固正則表達式引擎根據正則去匹配字符的時候,是通過檢查索引的方式。妻原配就是好,可以直接使用正則表達式調用它。下面解釋一下上面這些常用的元字符查找單個字符,除了換行和行結束符。正則系列文章整理到了 上一章內容:正則表達式實戰篇 知識回顧 前2章分別學習了正則表達式入門技巧,以及遇到正則需求該如何去分析問題,還有正則表達式實戰的一些場景解釋。 這一章內容偏向理論,推薦你點擊開頭的...
摘要:語法分析對輸入的文本按照語法規則進行分析并確定其語法結構的一種過程,稱為語法分析。遞歸下降分析法遞歸下降分析法,也稱為自頂向下分析法。表達式代碼生成我們通常用的四則運算表達式是中綴表達式,但是對于計算機來說中綴表達式不便于計算。 四則運算的語法規則(語法規則是分層的) x* 表示 x 出現零次或多次 x | y 表示 x 或 y 將出現 ( ) 圓括號,用于語言構詞的分組 以下規則...
閱讀 3199·2021-09-29 09:34
閱讀 3551·2021-09-10 10:51
閱讀 1948·2021-09-10 10:50
閱讀 6731·2021-08-12 13:31
閱讀 3000·2019-08-30 15:54
閱讀 1560·2019-08-30 15:44
閱讀 1430·2019-08-29 12:26
閱讀 2654·2019-08-26 18:36