1. 程式人生 > >JS基礎-運算符-函數

JS基礎-運算符-函數

oca 條件表達式 else 操作數 註意 變量沖突 彈出 amp 修改

1.運算符
1.賦值運算符和擴展運算符
1.賦值運算符 =
2.擴展運算符
+=,-=,*=,/=,%=,^=....
ex:
a=a+b;--> a+=b;
a=a+1;--> a++,a+=1,++a
實現兩個數字的換位:
a^=b;
b^=a;
a^=b;
2.條件運算符
條件運算符又稱三目運算符。
單目(一元)運算符,只需要一個操作數或表達式。
ex:++,--,!
雙目(二元)運算符,需要兩個操作或表達式
ex:+,-,*,/,%,>,<,>=,<=,==,===,!=,!==,&,|,^,&&,||
三目(三元)運算符,需要三個表達式或操作數。
語法:
條件表達式?表達式1:表達式2;
先判斷條件表達式的值,如果條件為true,則執行表達式1,如果條件為false,則執行表達式2。
ex:
從彈出框中輸入成績,如果成績大於60,則輸出及格,否則輸出不及格。
練習:
從彈出框中輸入成績:
如果成績等於100,則輸出"獎勵1000元",
如果成績>=90,則輸出"獎勵100元",
如果成績>=70,則輸出"獎勵10元素",
否則,輸出"請大家吃飯"。
2.函數
1.什麽是函數
函數,function,也稱為方法
函數-功能。
函數是一段預定義好,並可以被反復執行的代碼塊。
預定義:提前定義好,並非馬上執行。
反復執行:允許被多次調用。
代碼塊:可以包含多條可執行的語句
使用過的函數:
parseInt();
parseFloat();
Number();
alert();
document.write();
2.定義和使用函數
1.普通函數的聲明和使用
1.聲明
function 函數名(){
//函數體-若幹可執行的代碼
}
2.調用函數
在任意javascript合法位置處通過
函數名(); 對函數進行調用。
3.要同時調用多個函數方式如下:
function test(){
calculate(); //調用函數1
print();//調用函數2
}

練習:
1.定義一個函數名稱calaulate(計算)
在函數體內,定義兩個變量,num1, num2並賦值為數字,計算兩個數字之和,並打印在控制臺。
2.在網頁中添加一個按鈕,單擊按鈕時調用函數。
2.帶參函數的聲明和使用
1.聲明
function 函數名(參數列表){
//函數體-js語句
}
參數列表:可以聲明1個或多個參數,多個參數間用逗號分隔。
聲明函數時,聲明的參數稱為“形參”。
2.調用
函數名(參數值列表);
註意:盡量按照聲明函數的格式進行調用
調用時,傳遞的參數值稱為“實參”。
練習:
定義帶參函數,函數體內計算兩個參數的乘積,並打印輸出。單擊按鈕時調用函數。
3.帶返回值函數的聲明和使用
1.聲明
function 函數名(){
//函數體
return 值;
}

2.調用
允許使用一個變量接收函數的返回值
var result=函數名();
練習:
定義一個可以接收三個參數的函數,函數體內返回三個數字的和。並將結果打印在控制臺。
3.函數的作用域
1.變量作用域
作用域表示的是變量或函數的可訪問範圍。
js中的作用域分為兩種:
1.函數作用域:只在函數範圍內有效
函數作用域又稱為局部變量,只在聲明的函數中有效

2.全局作用域:js代碼的任何位置都有效
全局作用域又稱全局變量,一經聲明,任何位置都能使用。
1.不在function中聲明的變量,為全局變量
2.聲明變量不使用var ,無論任何位置聲明,都是全局變量(不推薦)
2.註意
1.全局變量和局部變量沖突時,優先使用局部變量。
2.聲明提前
js程序正式執行之前,function聲明的函數,會將所有var聲明的變量,都預讀到所在作用域的頂部,但賦值還是保留在原位置。
函數同樣也有聲明提前的功能。
3.按值傳遞
1.什麽是按值傳遞
原始數據類型,在做參數傳遞時,都是按照“值傳遞”的方式來傳參。
值傳遞:真正傳遞參數時,實際上傳遞的是值的副本(復制出來一個值),而不是原始值。
*以後不要把原始數據類型拿到函數中去修改值。
練習:
1.創建變量score,賦值為90;
2.再創建函數changeScore(num),在函數體內將num+5再輸出。
3.調用changeScore函數,並將score以實參傳入函數,再輸出score的值。
3.函數作用域
分為兩種:
1.局部函數
在某個function中聲明的函數
2.全局函數
在最外層<script>定義的函數就是全局函數,全局函數一經定義,任何位置都能調用。
4.ECMAScript提供一組全局函數
1.parseInt();
2.parseFloat();
3.Number();
4.isNaN();
5.encodeURI();
URL:Uniform Resource Locator統一資源定位器,俗稱:路徑
URI:Uniform Resource Identifier(標識符)
作用:對統一資源標識符進行編碼,並返回編碼後的字符串。
所謂的編碼,就是將地址中多字節的文字編碼成單字節文字。
6.decodeURI();
作用:對已編碼的URI進行解碼,並返回解碼後的字符串。
7.encodeURIComponent();
在encodeURI的基礎上,允許對特殊字符進行編碼。
8.decodeURIComponent();
允許對特殊字符解碼。
9.eval();
作用:執行以字符串表示的js代碼
練習:
定義一個函數,在函數體內接收彈出框輸入的一段js代碼(document.write("<h1>js全局函數</h1>")),並用eval函數來執行該段js代碼。
5.遞歸調用
遞歸:在一個函數的內部再一次調用自己。
問題:想要求5的階乘
5! 5*4*3*2*1 -->5*4!
4! 4*3*2*1 -->4*3!
3! 3*2*1 -->3*2!
2! 2*1 -->2*1!
1! 1*1
求n的階乘,用一個函數表示?
function f(n){
/*if(n==1){
return 1;
}else{
return n*f(n-1)
}*/
return n==1?1:n*f(n-1)
}
效率:
在本次調用還未結束時,就開始下次的調用,本次調用就會被掛起,直到所有的調用都完成之後,才會依次返回,調用次數越多,效率越低。
練習:
以下數列(斐波拉契數列)
1,1,2,3,5,8,13,21,34,55......
通過f(n)計算數列中第n個數字的值。
已知:
該數列中第一個數和第二個數都是1。
從第三個數開始,每個數字都是前兩個數字的和。
f(1)=1
f(2)=1
f(3)=f(2)+f(1)
f(4)=f(3)+f(2)
...
f(n)=f(n-1)+f(n-2)

JS基礎-運算符-函數