JavaScript函式(內建函式),變數詳解
JavaScript函式(內建函式),變數詳解
目錄
1 |
宣告函式 |
7.4 |
內部(私有)函式 |
2 |
呼叫函式 |
7.5 |
返回函式的函式 |
3 |
形參,實參 |
7.6 |
函式的重寫 |
4 |
內建變數 |
8 |
JavaScript變數詳解 |
5 |
內建函式 |
8.1 |
作用域鏈 |
6 |
變數的作用域 |
9 |
(function(){…}());結構 |
|
函式的含義與多種用法 |
10 |
setter 和getter |
7.1 |
函式也是資料,可以把一個函式賦給一個變數 |
11 |
JavaScript迭代器的寫法 |
7.2 |
回撥函式 |
|
|
7.3 |
即時函式 |
|
|
1、宣告函式
關鍵詞, function
函式名 sum
引數 a,b
function sum(a,b){
var c = a +b;
return c;
}
2、呼叫函式
>var result = sum(1,2);
>result;
3
若函式所需的呼叫引數在呼叫的時候忘了傳遞相關的引數值,
JavaScript會自動設定為undefined,最後會返回NaN
例如:>sum(1);
NaN
3、形參、實參
形參:宣告函式時所用的那些引數
實參:呼叫函式時所傳遞的那些引數
4、內建變數
arguments變數:返回函式所接受的所有引數
例子:
>function arg(){
return arguments;
}
>arg(1,2,3,4,5);
[1,2,3,4,5]
5、內建函式
【目錄:
parseInt(),
parseFloat() ,
isNaN(),
isFinite(),
encodeURI(),
decodeURI(),
encodeURIComponent(),
decodeURIComponent(),
eval(),
alert()
】
(1)parseInt() 將收到的任何輸入值轉換成整型型別輸出
可選的第二引數:radix,
parseInt('',radix)
【radix 用處,設定函式所期望的數字型別:十進位制、十六進位制,二進位制】
不選第二引數radix時
>parseInt('377');
377
>parseInt('0377'); //首引數以0開頭時,預設為八進位制
255
>parseInt('0x377'); //首引數以0x開頭時,預設為十六進位制
887
(2)parseFloat()
跟parseInt功能差不多,區別:僅支援十進位制,引數還可以接受指數形式的資料
例子:>parseFloat('123e-2');
1.23
(3)isNaN()
用處:確定某個輸入值是否為可以參與算數運算的數字,返回的是布林值boolean
例如:>isNaN(parseInt('abc123'));
true
說明abc123是不可以參與算數運算的數字
因為 >isNaN(NaN);
true
(4)isFinite();
用處:用來檢查輸入值是否是一個既非Infinity也非NaN的數字
例如:>isFinite(Infinity);
false
>isFinite(12);
true
(5)encodeURI();
用處:轉義URL ,返回一個可用的URL
(6)encodeURIComponent();
用處:轉義URL ,返回的是URL的一部分
(7)decodeURI();
用處:對應encodeURI()的反編碼
(8)decodeURIComponent();
用處:對應encodeURIComponent()的反編碼
(9)eval()
用處:將其輸入的字串當做JavaScript程式碼來執行
例子:>eval('var ll = 2;');
>ll;
2
(10)alert()
作用:顯示一個帶文字的訊息對話方塊
6、變數的作用域(JavaScript)
JavaScript中變數的定義不是以程式碼塊作為作用域的,而是以函式作為作用域。
如果宣告變數時沒有使用var語句,那麼它就會被預設為全域性變數。
例子:
>function f(){local =2}
>local;
ReferenceError: local is not defined
>f();
undefined
>local;
2
7、函式的含義與多種用法
7.1、函式也是資料,可以把一個函式賦給一個變數
var f = function(a){ //function(a) 為匿名函式
return a;
}
這種定義方式叫做函式標識記法
舉例:
>var yzy = function(){ return 1 }
>typeof yzy
function //證明函式也是資料
函式(特殊的資料的性質):
1、包含的是程式碼
2、是可執行的
7.2、回撥函式
例子:>function invokeAdd(a,b){ //宣告函式invokeAdd()
return a()+b();
}
>function one(){ //宣告函式one
return 1;
}
>function two(){ //宣告函式two
return 2;
}
>invokeAdd(one,two); //one與two就是invokeAddd的回撥函式
3
>invokeAdd(function(){return 1; } , function(){return 2;}); //匿名回撥函式
3
7.3、即時函式
含義:函式定義後立即呼叫
例子:function(){
alert('哈哈!!!');
}
7.4、內部(私有)函式
用函式標識記法寫個例子
例如: var outer = function (param){
var inner = function(theinput){
return theinput*2;
};
return inner(param;)
}
注意:若返回的函式不帶括號,結果只是一個函式引用,不會產生函式的呼叫
7.5、返回函式的函式
例子:function a(){
alert('AAA');
return function(){ //返回匿名函式
alter('BBB');
}
}
7.6、函式的重寫
例子:
>function a(){
alert("A!!!");
a = function(){ | 重寫函式a
alert("B!!!"); |
} |
}
8、JavaScript變數詳解
1、全域性變數:定義在所有函式之外的變數
2、區域性變數:定義在函式之內的變數
注意:若宣告變數的時候,沒有使用var,該變數會被預設為全域性變數
問題:怎樣將函式中的區域性變數變為全域性變數
首先,在一個函式中定義一個不用var宣告的變數,
其次, 呼叫該函式,建立該變數並賦值,
最後,該變數變為全域性變數
例子:>function f(){ local = 1;}
>f();
undefind
>local;
1
8.1、作用域鏈
含義:處於作用域鏈中的變數除了可以訪問自己本身的作用域與全域性變數,也可以訪問父級的作用域
例子:
>var yzy_local = 1;
>function outer(){ //父級
var outer_local = 2;
function inner(){ //子級 (子級可以訪問父級的作用域,形成作用域鏈)
var inner_local = 3;
return yzy_local + outer_local+inner_local;
}
}
>outer();
6
注意:若返回的函式不帶括號,結果只是一個函式引用,不會產生函式的呼叫
9、(function(){…}());結構
作用:立即呼叫的函式表示式
10、getter 與 setter
【作用】:賦值之前給變數一定的保護
【要求】:將這兩個函式放在同一函式中,目的:享受同一作用域
例子:
var getValue,setValue;
(function(){
var secret = 0;
getValue = function(){
return secret;
}
setValue = function(v){
if(typeof v === "number"){ //判斷是否number型別的值
secret = v;
}
}
}() );
11、JavaScript迭代器的寫法
例項:
(1)首先
function setup(x){
var i= 0;
return function(){
return x[i++];
};
}
(2)之後用一組陣列來呼叫setup()函式,就可以創建出我們要用的next()函式。
var next = setup(['a','b','c']);
(3)迭代器函式
>next();
"a"
>next();
"b"
>next();
"c"