天天看點

Javascript關鍵字,條件語句,函數及函數相關知識

    • 關鍵字
    • 條件語句
      • 作用域
      • 回調

根據規定,關鍵字是保留的,不能用作變量名或函數名。

下面是一些ECMAScript關鍵字的完整清單。

break ,case,catch,continue,default,delete,do,else,finally.

for,function,if,iInstanceof,new,return,switch,this,throw.

try,typeof,var,void,while,with.

  • 比較運算符

    比較運算符執行的是比較運算。每個比較運算符都傳回一個布爾值。比較運算符在邏輯語句中使用,以測定變量或值是否相等。

== (等于) === (全等-值和類型) != (不等于)
(大于) < (小于) >= (大于或等于) <= (小于或等于)
  • 邏輯運算符

(1)邏輯運算符,用于測定變量或值之間的邏輯。

&& (and) || (or) ! (not)

(2)條件運算符

variablename=(condition)?value1:value2;

如果條件condition滿足,則為value1,否則為value2。

(3)if語句

①if語句

if(條件){

隻有當 條件為true時執行的代碼

};

②if…else if…else語句

if(條件1)

{

當條件1為true時執行的代碼

}

else if(條件2)

當條件2為true時執行的代碼

else

{當條件1和條件2都不為true時執行的代碼

(4)switch語句

switch語句是if語句的兄弟語句。

可以用switch語句為表達式提供一系列的分支情況(case)。

switch(expression)
   case value:statement;
       break;
   case value:statement;
       break;
   case value:statement;
       break;
   default:statement;


----------


###**循環語句**
(1)while語句
           

while(表達式)

語句;

}

(2)do...while語句

```do
{
    語句;
}while(表達式);




<div class="se-preview-section-delimiter"></div>
           

do…while為不确定性循環,先執行大括号中的語句,當表達式的結果為真(true)時,執行循環中的語句;當表達式為假(false)不執行循環,并退出do…while循環。

(3)for語句

for(初始化表達式;判斷表達式;循環表達式)
{
    語句;
}




<div class="se-preview-section-delimiter"></div>
           

先執行“初始化表達式”,再根據“判斷表達式”的結果判斷是否執行循環,當判斷表達式為真(true)時,執行循環中的語句,最後執行“循環表達式”,并繼續傳回循環的開始進行新一輪循環;表達式為假(false)時不執行循環,并退出for循環。

(4)break和continue語句

①break與continue說明

break可以跳出switch…case語句,繼續執行switch語句後面的内容。break語句還可以跳出循環,也就是結束循環語句的執行。continue語句的作用為結束本次循環,接着進行下一次是否執行循環的判斷。

②break和continue的本質差別

continue與break的差別是:break是徹底結束循環,而continue是結束本次循環。

(5)for…in語句

for…in語句用于周遊數組或者對象的屬性(對數組或者對象的屬性進行循環操作)。for…in中的代碼每執行一次就會對數組的元素或者對象的屬性進行一次操作。

for(變量in對象)
{
   在此執行代碼
};


“變量”用來指定變量,指定的變量可以是數組元素,也可以是對象的屬性。


----------






<div class="se-preview-section-delimiter"></div>

##**函數**

> 函數是一組可以随時随地運作的語句,簡單的說,函數是完成某個功能的一組語句,它接收0個或者多個參數,然後執行函數體來完成某個功能,最後根據需要傳回不傳回處理結果。

(1)定義和調用函數

> 函數是可以重複使用的代碼塊,可以由一個事件執行,或被調用執行。函數是ECMAJavascript的核心。
> 函數是由這樣的方式進行聲明的:關鍵字function、函數名、一組參數,以及置于花括号中的待執行代碼。

基本文法`
function functionName(arg0,arg1,...argN){
   statements
   };`
如何調用函數

> 通過其名字加上括号中的參數進行調用。

函數如何傳回參數值

> 函數隻需要使用return後跟要傳回的值即可。
> 如果函數無傳回值,那麼可以調用沒有參數的return,随時退出函數。

(2)用arguments對象通路函數的參數

> Javascript函數并沒有嚴格要求哪些參數是必選參數,哪些參數是可選參數,是以傳入的參數個數是允許不等于定義函數時參數的個數的。如果在函數中使用了未定義的參數,則會提示文法錯誤(參數未定義),Javascript代碼不會正常運作,如果參數已經定義,但未正确地傳入,相關參數值會以undefined替換,Javascript代碼仍正常運作。

<hr/>





<div class="se-preview-section-delimiter"></div>

###函數對象

**因為函數是對象,是以它們可以像任何其他的值一樣被使用。函數可以儲存在變量、對象和數組中。函數可以被當做參數傳遞給其他函數,函數也可以再傳回函數。而且,因為函數是對象,是以函數可以擁有方法。**

**函數的與衆不同在于它們可以被調用。**






<div class="se-preview-section-delimiter"></div>

###函數字面量

函數對象通過函數字面量來建立





<div class="se-preview-section-delimiter"></div>
           

//建立一個名為add的變量,并用來把兩個數字相加的函數指派給它。

var add = function(a,b){

return a+b;

函數字面量包括4個部分。
**第1個部分是保留字function.**
**第2個部分是函數名,可悲省略。**
**函數的第3部分是包圍在圓括号中的一組參數。**多個參數用逗号分隔,這些參數将被定義為函數中的變量。它們不像普通的變量那樣将被初始化為undefined,而是在該函數被調用時初始化為實際提供的參數的值。
**第4部分是包圍在花括号中的語句。這些語句是函數的主體。**

一個内部函數除了可以通路自己的參數和變量,同時它也能自由通路把它嵌套在其中的父函數的參數與變量。通過函數字面量建立的函數對象包含一個連接配接到外部上下文的連接配接。這被稱為閉包。





<div class="se-preview-section-delimiter"></div>

###調用
調用一個函數會暫停目前函數的執行,傳遞控制權和參數給新函數。

除了聲明時定義的形式參數,每個函數還接收兩個附加參數:this和arguments。參數this在面向對象程式設計非常重要,它的值取決于調用的模式。

**在JS中一共有4種調用模式:方法調用模式、函數調用模式、構造器調用模式和apply調用模式。**這些模式在如何初始化關鍵參數this上存在差異。

**調用運算符是跟在任何産生一個函數值的表達式之後的一對圓括号。** 圓括号内可含零個或多個用逗号隔開的表達式。每個表達式産生一個參數值。每個參數值被賦予函數聲明時定義的形式參數名。當實際參數(arguments)的個數與形式參數(parameters)的個數不比對時,不會導緻運作時報錯。如果實際參數值過多了,超出的參數值會被忽略。如果實際參數值過少,缺失的值會被替換為undefined。**對參數值不會進行類型檢查:任何類型的值都可以被傳遞給任何參數。**





<div class="se-preview-section-delimiter"></div>

###方法調用模式
**當一個函數被儲存為對象的一個屬性時,我們稱它為一個方法。**

當一個方法被調用時,this被綁定到該對象。如果調用表達式包含一個提取屬性的動作(即包含一個 . 點表達式或[subscript]下标表達式),那麼它就是被當做一個方法來調用。





<div class="se-preview-section-delimiter"></div>
           

//建立myObject對象。它有一個value屬性和一個increment方法。

//incre方法接受一個可選的參數。如果參數不是數字,那麼預設使用數字1。

var myObject = {

value : 0,

increment : function(inc){

this.value +=typeof inc ===’number’ ? inc : 1;

myObject.increment();

document.writeln(myObject.value); // 1

myObject.increment(2);

document.writeln(myObject.value); // 3

方法可以使用this通路自己所屬的對象,是以它能從對象中取值或對對象進行修改。

通過this可去的它們所屬對象的上下文的方法稱為公共方法。





<div class="se-preview-section-delimiter"></div>

###函數調用模式
當一個函數并非一個對象的屬性時,那麼它就是被當做一個函數來調用的:





<div class="se-preview-section-delimiter"></div>
           

var sum = add(3,4); // sum=7.

以此模式調用函數時,this被綁定到全局對象。





<div class="se-preview-section-delimiter"></div>
           

//給myObject增加一個double方法。

myObject.double = function() {

var that = this ;

var helper = function () {

that.value = add(that.value,that.value);

helper(); //以函數的形式調用helper。

//以方法的形式調用double

myObject.double();

document.writln(myObject.value); //6

<div class="se-preview-section-delimiter"></div>

###構造器調用模式

**JavaScript是一門基于原型繼承的語言。**

這意味着對象可以直接從其他對象繼承屬性,該語言是無類型的。

如果在一個函數前面帶上new來調用,那麼背地裡将會建立一個連接配接到該函數的prototype成員的新對象,同時this會被綁定到那個新對象上。

new字首也會改變return 語句的行為。





<div class="se-preview-section-delimiter"></div>
           

// 建立一個名為Quo的構造器函數.它構造一個帶有status屬性的對象。

var Quo = function (String){

this.status = string;

//給Qup的所有執行個體提供一個名為get_status的公共方法。

Quo.prototype.get_status = function () {

return this.status;

//構造一個Quo執行個體。

var myQuo = new Quo(“confused”);

document.writln(myQuo.get_status()); //列印顯示“confused”

**一個函數,如果建立的目的就是希望結合new字首來調用,那麼它就被稱為構造器函數。**





<div class="se-preview-section-delimiter"></div>

###Apply調用模式

apply方法讓我們建構一個參數數組傳遞給調用函數。它允許我們選擇this的值。apply方法接收兩個參數,第1個是要綁定給this的值,第2個就是一個參數數組。





<div class="se-preview-section-delimiter"></div>
           

//構造一個包含兩個數字的數組,并将它們相加。

var array = [3,4];

var sum = add.apply(null,array); //sum=7;

<div class="se-preview-section-delimiter"></div>

###傳回
當一個函數被調用時,它從第一個語句開始執行,并在遇到關閉函數的 } 時結束。 然後函數把控制權交還給調用該函數的程式。

return 語句可用來使函數提前傳回。當return 被執行時,函數立即傳回而不再執行餘下的語句。

一個函數總是會傳回一個值,如果沒有指定傳回值,則傳回undefined。

如果函數調用時在前面加上了new字首,且傳回值不是一個對象,則傳回this(該新對象)。





<div class="se-preview-section-delimiter"></div>

###異常





<div class="se-preview-section-delimiter"></div>
           

var add= function (a){

if(typeof a!== ‘number’ || typeof b!== ‘number’){

throw {

name:’TypeError’,

message:’add needs numbers’

};

throw 語句中斷函數的執行。它應該抛出一個exceptionb對象,該對象包含一個用來識别異常類型的name屬性和一個描述性的message屬性。

該exception對象将被傳遞到一個try語句的catch從句:





<div class="se-preview-section-delimiter"></div>
           

//構造一個try_it函數,以不正确的方式調用之前的add函數。

var try_id = function () {

try{

add(“seven”);

}catch (e) {

document.writln(e.name+’:’+e.message);

try_it();

“`

先執行“初始化表達式”,再根據“判斷表達式”的結果判斷是否執行循環,當判斷表達式為真(true)時,執行循環中的語句,最後執行“循環表達式”,并繼續傳回循環的開始進行新一輪循環;表達式為假(false)時不執行循環,并退出for循環。
(4)break和continue語句
①break與continue說明

> break可以跳出switch...case語句,繼續執行switch語句後面的内容。break語句還可以跳出循環,也就是結束循環語句的執行。continue語句的作用為結束本次循環,接着進行下一次是否執行循環的判斷。

②break和continue的本質差別

> continue與break的差別是:break是徹底結束循環,而continue是結束本次循環。

(5)for...in語句
for...in語句用于周遊數組或者對象的屬性(對數組或者對象的屬性進行循環操作)。for...in中的代碼每執行一次就會對數組的元素或者對象的屬性進行一次操作。
           

for(變量in對象)

在此執行代碼

“變量”用來指定變量,指定的變量可以是數組元素,也可以是對象的屬性。

//構造一個try_it函數,以不正确的方式調用之前的add函數。
var try_id = function () {
    try{
        add("seven");
    }catch (e) {
        document.writln(e.name+':'+e.message);
    }
}
try_it();           

var foo = function () {
    var a = 3, b = 5;

    var bar = function(){
        var b = 7, c = 11;
        //此時,a為3,b為7,c為11
        a +=b+c;
        //此時,a為21,b為7,c為11
    };
    //此時,a為3,b為5,而c還沒有定義。
    bar();
    //此時,a為21,b為5。
};           

函數使得不連續事件的處理變得更容易。

request = prepare_the_request ();
response = send_request_synchronously(request);
display(response);            
request = prepare_the_request();
send_request_asynchronously(request,function (response){
    display(response);
});           

繼續閱讀