成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript語(yǔ)法理論知識(shí)點(diǎn)

ethernet / 3399人閱讀

摘要:方法用于刪除原數(shù)組中的一部分元素,并可以在被刪除的位置添加新數(shù)組成員,返回值是被刪除的元素。遞歸函數(shù)函數(shù)內(nèi)部調(diào)用函數(shù)自身,稱之為遞歸。在函數(shù)內(nèi)使用聲明的變量是局部變量,是人為的聲明。

前言

這個(gè)筆記不知道什么時(shí)候記下的反正很有意思,很基礎(chǔ),很理論。

JavaScript學(xué)習(xí)筆記1 第一章 JavaScript概述 1.1 什么是JavaScript

JavaScript是一種輕量級(jí)的腳本語(yǔ)言,也是一種嵌入式(embedded)語(yǔ)言,是一種對(duì)象模型語(yǔ)言。

腳本語(yǔ)言又被稱為擴(kuò)建的語(yǔ)言,或者動(dòng)態(tài)語(yǔ)言,是一種編程語(yǔ)言,用來(lái)控制軟件應(yīng)用程序,腳本通常以文本(如ASCII)保存,只在被調(diào)用時(shí)進(jìn)行解釋或編譯,在依靠特定的宿主環(huán)境提供API來(lái)實(shí)現(xiàn)操作和效果。常見(jiàn)的宿主環(huán)境有瀏覽器,服務(wù)器環(huán)境(操作系統(tǒng))。
嵌入式語(yǔ)言一句話就是不能獨(dú)立做事,插入到其他語(yǔ)言才能用的語(yǔ)言。
1.2 使用方法 1.2.1 內(nèi)部引用(標(biāo)簽引入)

理論上

邏輯或解析圖

2.3 流程控制

順序結(jié)構(gòu):從上而下

分支結(jié)構(gòu)(選擇結(jié)構(gòu)):if else if else 和switch。

if else 和 switch的區(qū)別?

if結(jié)構(gòu)不僅可以判斷固定值, 還可以判斷范圍區(qū)間。

switch結(jié)構(gòu)只能判斷固定值情況。

3.循環(huán)結(jié)構(gòu):while,for,do while等

4.continue和break的區(qū)別;

continue:跳出當(dāng)前循環(huán),繼續(xù)下次循環(huán)。

break:跳出整個(gè)循環(huán)結(jié)構(gòu),也就相當(dāng)于結(jié)束循環(huán)。

2.4 數(shù)組 2.4.1 數(shù)組的簡(jiǎn)單使用

數(shù)組是一組有序數(shù)據(jù)的集合,在內(nèi)存中表現(xiàn)為一段連續(xù)的內(nèi)存地址。

數(shù)組的聲明也很簡(jiǎn)單:

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;

多維數(shù)組:數(shù)組的元素也是一個(gè)數(shù)組,則父數(shù)組是多為數(shù)組。

var arr=[1,2,[3,4,5,[6,7]]];是個(gè)三維數(shù)組

獲取數(shù)組元素:通過(guò)下標(biāo)獲?。〝?shù)組[下標(biāo)]),多為數(shù)組的話所有下標(biāo)都寫上,不然只的到所在行的全部元素。

數(shù)組的遍歷:

最常用的通過(guò)for循環(huán),根據(jù)循環(huán)語(yǔ)法,在循環(huán)之前先獲取數(shù)組長(zhǎng)度
var arr=["Apple","Huawei","SumSung"];
var len=arr.length;
for(var i=0;i
for...in循環(huán)遍歷數(shù)組:for..in可以遍歷對(duì)象,也可以遍歷數(shù)組,畢竟數(shù)組也是個(gè)特殊的對(duì)象。
var arr=["Apple","Huawei","SumSung"];
for(var i in arr){
    //每次遍歷是,系統(tǒng)自動(dòng)將元素的索引下標(biāo)放入變量i中
    console.log(arr[i]);
}
2.4.2 數(shù)組對(duì)象的屬性及方法(很重要,背下來(lái))
length屬性:返回?cái)?shù)組的成員數(shù)量即數(shù)組的長(zhǎng)度。

數(shù)組對(duì)象的常用方法:

push方法:用于在數(shù)組的末端添加一個(gè)或多個(gè)元素,并返回新元素的數(shù)組長(zhǎng)度。注意push方法會(huì)改變?cè)瓟?shù)組。

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方法:用于刪除數(shù)組的最好一個(gè)元素,并返回該元素。注意,pop方法會(huì)改變?cè)瓟?shù)組

var a=["a","b","c"];
var b=a.pop();//c
console.log(a);//Array["a","b"]
console.log(b);//c

join方法:用于參數(shù)分隔符,將所有數(shù)組成員一個(gè)字符串返回,如果不提供參數(shù),默認(rèn)用逗號(hào)分隔。不改變?cè)瓟?shù)組。

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方法:用于多個(gè)數(shù)組的合并,它將新數(shù)組的成員添加到原數(shù)組的尾部,然后返回一個(gè)新的數(shù)組,原數(shù)組不變。

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方法:用于刪除數(shù)組的第一元素,并返回給該元素。注意改變?cè)瓟?shù)組。

var a=[1,2,3];
var b=a.shift();
console.log(a);//Array [ 2, 3 ]
console.log(b);//1

unshift方法:用于在數(shù)組的第一個(gè)位置添加一個(gè)元素,并返回新加元素后的數(shù)組長(zhǎng)度。注意該方法會(huì)改變?cè)瓟?shù)組。

var a=[1,2,3];
var b=a.unshift(5);
console.log(a);//Array [ 5, 1, 2, 3 ]
console.log(b);//4

reverse方法:用于顛倒數(shù)組中的元素,返回改變后的數(shù)組。注意,該方法將改變?cè)瓟?shù)組。

var a=[1,2,3];
var b=a.reverse();
console.log(a);//Array [ 3,2,1 ]
console.log(b);//Array [ 3,2,1 ]

slice方法:用于提取原數(shù)組中的一部分元素(相當(dāng)于截取),返回一個(gè)新數(shù)組,原數(shù)組不變。它的第一個(gè)參數(shù)為起始位置(從0開(kāi)始) , 第二個(gè)參數(shù)為終止位置(但該位置的元素本身不包括在內(nèi)) 。如果省略第二個(gè)參數(shù), 則一直返回到原數(shù)組的最后一個(gè)成員。

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方法:用于刪除原數(shù)組中的一部分元素,并可以在被刪除的位置添加新數(shù)組成員,返回值是被刪除的元素。注意,該方法會(huì)改變?cè)瓟?shù)組。splice的第一個(gè)參數(shù)是刪除的起始位置, 第二個(gè)參數(shù)是被刪除的元素個(gè)數(shù)

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方法:用于遍歷數(shù)組的所有成員,執(zhí)行某種操作;forEach方法的參數(shù)是一個(gè)函數(shù),數(shù)組的所有成員會(huì)依次執(zhí)行該函數(shù),它接受三個(gè)參數(shù),分別是當(dāng)前位置的值,當(dāng)前位置的編號(hào)和整個(gè)數(shù)組

var a = ["a", "b", "c", "d", "e", "f"];
a.forEach(function(v,k,h){
    console.log(v);
    console.log(k);
    console.log(h);
});
//第三個(gè)參數(shù)可以寫可以不寫,它帶便遍歷次數(shù)
第三章 函數(shù) 3.1 函數(shù)概述

函數(shù)就是制作工具的工具,比如計(jì)算器就是一個(gè)工具,而制作計(jì)算器的工具就是函數(shù),也就是制作工具的工具。一次定義多次使用。

用函數(shù)的好處:節(jié)省代碼的數(shù)量,減少代碼量,使代碼可以重復(fù)使用,節(jié)省空間,節(jié)省時(shí)間,使程序代碼具有結(jié)構(gòu)化,模塊化,后期維護(hù)更友好等等很多好處

3.2 函數(shù)基本使用 3.2.1 函數(shù)的聲明及調(diào)用

多次聲明同一個(gè)函數(shù)的話,最后一次聲明的函數(shù)會(huì)覆蓋前面的函數(shù),前面的聲明在任何時(shí)候都是無(wú)效的。

遞歸函數(shù):函數(shù)內(nèi)部調(diào)用函數(shù)自身,稱之為遞歸。只要是遞歸必須的有判斷,不然它是個(gè)死循環(huán),用別的函數(shù)解決的問(wèn)題最好別用遞歸解決,遞歸占內(nèi)存大,不友好。

function Recursion(x){
    if(x>1){
        return x+Recursion(x-1);
    }else{
        return 1;
    }
}
console.log(Recursion(100);
3.2.2 函數(shù)的參數(shù)及返回值

函數(shù)的參數(shù)有形參和實(shí)參:

形參就是函數(shù)聲明時(shí)需要接受的參數(shù),可以理解成暫時(shí)的占位符,并無(wú)實(shí)際意義

實(shí)參就是調(diào)用函數(shù)是傳遞進(jìn)函數(shù)的具體的實(shí)際數(shù)據(jù),也就是給占替代位符的的值

函數(shù)體內(nèi)部的return語(yǔ)句:表示將數(shù)據(jù)返回給調(diào)用者。return后面即使有語(yǔ)句,也不會(huì)執(zhí)行,也就是return后面不執(zhí)行.return語(yǔ)句可有可無(wú),沒(méi)有則不反悔任何值或者說(shuō)返回undefined。

函數(shù)中的arguments對(duì)象:arguement是函數(shù)調(diào)用時(shí)的實(shí)參列表;只是實(shí)參列表

function Argu(a){
    console.log(arguments);
}
Argu(1,2,3);

aruguments對(duì)象帶有一個(gè)callee屬性,返回他所對(duì)應(yīng)的原函數(shù)。callee代表當(dāng)前運(yùn)行的函數(shù)

function Argu(a){
    console.log(arguments.callee);
}
Argu(1,2,3);
3.2.3 自調(diào)用匿名函數(shù)

函數(shù)可以沒(méi)有名字嗎?當(dāng)然可以:(function(){})();

為什么要有自調(diào)用匿名函數(shù)?

 因?yàn)橛忻瘮?shù)有缺點(diǎn),可能運(yùn)行時(shí)會(huì)出現(xiàn)命名沖突,如果在編寫程序時(shí),直接采取自調(diào)用匿名函數(shù),則不會(huì)產(chǎn)生命名沖突問(wèn)題。市場(chǎng)上很多框架,如JQuery.js,ext.js等都是采用匿名函數(shù)進(jìn)行封裝。

使用自調(diào)用匿名函數(shù)結(jié)合aruguments對(duì)象實(shí)現(xiàn)遞歸:

var a = (function (n) {
            if (n > 1) {
                return n + arguments.callee(n - 1);
            } else {
                return 1;
            }
        })(100);
console.log(a);
3.3 函數(shù)作用域 3.3.1 定義

作用域指的是變量存在的范圍。JavaScript中作用域有兩種局部作用域和全局作用域。

局部作用域:變量只在函數(shù)的內(nèi)部存在。在函數(shù)內(nèi)使用var聲明的變量是局部變量,是人為的聲明。

全局作用域:變量在整個(gè)程序中存在,所有地方都可以讀取。全局變量一個(gè)是函數(shù)外聲明的變量;還有一個(gè)是函數(shù)內(nèi)不使用var的變量(僅僅帶便變量被賦值),也就是如果不是人為定義,系統(tǒng)會(huì)定義,系統(tǒng)定義的變量在整個(gè)程序中存在,不加var會(huì)污染全局。

function a(){
    b=1
}
a();
console.log(b);

局部變量會(huì)替代全局變量:函數(shù)內(nèi)部聲明的變量會(huì)在函數(shù)內(nèi)部區(qū)域覆蓋同名的全局變量。

 這說(shuō)明javascript的函數(shù)在查找自身函數(shù)定義開(kāi)始,從“內(nèi)”向“外”查找。
var a=3;
function fun(){
    var a=2;
    console.log(a);
}
fun();//2
console.log(a);//3
如果函數(shù)內(nèi)部不使用var關(guān)鍵字,那么函數(shù)內(nèi)部的賦值將會(huì)影響全局變量。

實(shí)際上,JavaScript默認(rèn)喲偶一個(gè)全局的對(duì)象窗口,全局作用域的變量實(shí)際上是被綁定到窗口對(duì)象上的一個(gè)屬性,因此,直接訪問(wèn)全局對(duì)象a和訪問(wèn)window.a是完全一樣的

var a=3;
function fun(){
    a=2;
    console.log(a);
}
fun();//2
console.log(a);//2

作用域解釋圖:

3.3.2 變量提升

JavaScript的函數(shù)定義有個(gè)特點(diǎn),他會(huì)先掃描整個(gè)函數(shù)體呃逆的語(yǔ)句,把所有聲明的變量提升到函數(shù)的頂部,注意只是把聲明提升了,并不會(huì)提升變量的賦值。

function fun(){
    console.log(a);//undefined
    var a=2;
    //JavaScript解析引擎來(lái)說(shuō)相當(dāng)于
    /**
    *var a;
    *var b=1+a;
    *alert(b);
    *a=2;
    **/
}
fun();
3.3.3 函數(shù)本身的作用域

函數(shù)本身也是一個(gè)值,也有自己的作用域;函數(shù)的作用域與變量一樣,就是它聲明時(shí)所作的作用域,與其運(yùn)行時(shí)所在的作用域無(wú)關(guān)

函數(shù)執(zhí)行時(shí)的作用域是定義時(shí)的作用域,而不是調(diào)用時(shí)的作用域。

var a=3;
var x=function(){
    console.log(a);
}
function f(){
    var a=4;
    x();
}
f();//3

再看這個(gè):

var x=function(){
    console.log(a);
}
function y(f){
    var a=2;
    f();
}
y(x);//ReferenceError: a is not defined
//函數(shù)執(zhí)行時(shí)的作用域是定義時(shí)的作用域,而不是調(diào)用是的,所以,這代碼運(yùn)行結(jié)果是這樣。

繼續(xù)看代碼

function fun(){
    var a=2;
    function bar(){
        console.log(a);
    }
    return bar;
}
var a=4;
var f=fun();
f();//2
第四章 語(yǔ)法分析 4.1 JavaScript代碼的編譯以及執(zhí)行

JavaScript代碼運(yùn)行,分為編譯階段和執(zhí)行階段:

編譯階段:聲明變量,聲明函數(shù)(display),語(yǔ)法檢查等操作,一旦出錯(cuò)不會(huì)執(zhí)行下一階段,除了錯(cuò)誤提示不輸出別的內(nèi)容

執(zhí)行階段:變量的賦值,函數(shù)的調(diào)用,代碼的執(zhí)行等操作,這一階段出錯(cuò)的話出錯(cuò)之前的內(nèi)容執(zhí)行;



4.2 script代碼段

在html中是一段獨(dú)立的代碼,這一段代碼出錯(cuò)不會(huì)影響下一個(gè)代碼段的執(zhí)行;不管前面的代碼段錯(cuò)誤出現(xiàn)在編譯階段還是執(zhí)行階段都不會(huì)影響下一段代碼的執(zhí)行。

為什么呢?

雖然script代碼段在一個(gè)頁(yè)面,但是script代碼并不是一起執(zhí)行,而是分開(kāi)解析與執(zhí)行。

JavaScript解析引擎從上而下讀取第一個(gè)代碼段-->放入內(nèi)存-->編譯階段-->執(zhí)行階段-->下一個(gè)JavaScript代碼段-->放入內(nèi)存...等操作;

總之一句話,JavaScript解析引擎執(zhí)行完一段代碼再執(zhí)行下一段代碼,每一段代碼都是獨(dú)立的存在。因此,前一個(gè)代碼無(wú)論發(fā)生什么錯(cuò)誤都不會(huì)影響下一個(gè)代碼段的執(zhí)行

看圖:

參考資料

W3school
菜鳥教程
JavaScript權(quán)威指南(第6版)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28445.html

相關(guān)文章

  • JavaScript語(yǔ)法理論識(shí)點(diǎn)

    摘要:方法用于刪除原數(shù)組中的一部分元素,并可以在被刪除的位置添加新數(shù)組成員,返回值是被刪除的元素。遞歸函數(shù)函數(shù)內(nèi)部調(diào)用函數(shù)自身,稱之為遞歸。在函數(shù)內(nèi)使用聲明的變量是局部變量,是人為的聲明。 前言 這個(gè)筆記不知道什么時(shí)候記下的反正很有意思,很基礎(chǔ),很理論。 JavaScript學(xué)習(xí)筆記1 第一章 JavaScript概述 1.1 什么是JavaScript JavaScript是一種輕量級(jí)的腳...

    Amos 評(píng)論0 收藏0
  • 正則系列——JavaScript正則表達(dá)式基礎(chǔ)語(yǔ)法鞏固篇

    摘要:基礎(chǔ)語(yǔ)法鞏固正則表達(dá)式引擎根據(jù)正則去匹配字符的時(shí)候,是通過(guò)檢查索引的方式。妻原配就是好,可以直接使用正則表達(dá)式調(diào)用它。下面解釋一下上面這些常用的元字符查找單個(gè)字符,除了換行和行結(jié)束符。正則系列文章整理到了 上一章內(nèi)容:正則表達(dá)式實(shí)戰(zhàn)篇 知識(shí)回顧 前2章分別學(xué)習(xí)了正則表達(dá)式入門技巧,以及遇到正則需求該如何去分析問(wèn)題,還有正則表達(dá)式實(shí)戰(zhàn)的一些場(chǎng)景解釋。 這一章內(nèi)容偏向理論,推薦你點(diǎn)擊開(kāi)頭的...

    phodal 評(píng)論0 收藏0
  • 編譯原理實(shí)戰(zhàn)入門:用 JavaScript 寫一個(gè)簡(jiǎn)單的四則運(yùn)算編譯器(二)語(yǔ)法分析

    摘要:語(yǔ)法分析對(duì)輸入的文本按照語(yǔ)法規(guī)則進(jìn)行分析并確定其語(yǔ)法結(jié)構(gòu)的一種過(guò)程,稱為語(yǔ)法分析。遞歸下降分析法遞歸下降分析法,也稱為自頂向下分析法。表達(dá)式代碼生成我們通常用的四則運(yùn)算表達(dá)式是中綴表達(dá)式,但是對(duì)于計(jì)算機(jī)來(lái)說(shuō)中綴表達(dá)式不便于計(jì)算。 四則運(yùn)算的語(yǔ)法規(guī)則(語(yǔ)法規(guī)則是分層的) x* 表示 x 出現(xiàn)零次或多次 x | y 表示 x 或 y 將出現(xiàn) ( ) 圓括號(hào),用于語(yǔ)言構(gòu)詞的分組 以下規(guī)則...

    hankkin 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)識(shí)點(diǎn)整理

    摘要:前言本文主要是有關(guān)前端方面知識(shí)按照目前的認(rèn)知進(jìn)行的收集歸類概括和整理,涵蓋前端理論與前端實(shí)踐兩方面。 前言:本文主要是有關(guān)前端方面知識(shí)按照 XX 目前的認(rèn)知進(jìn)行的收集、歸類、概括和整理,涵蓋『前端理論』與『前端實(shí)踐』兩方面。本文會(huì)告訴你前端需要了解的知識(shí)大致有什么,看上去有很多,但具體你要學(xué)什么,還是要 follow your heart & follow your BOSS。 初衷...

    Blackjun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<