# javascript快速入門4--函數與內置對象
## 函數
函數(又稱為方法)用于對一大段為了達到某種目的的代碼進行歸類,以使代碼更具有條理:
```
//一段計算三角形面積的代碼
var wide=window.prompt("請輸入三角形的底邊長度!",""); var high=window.prompt("請輸入三角形的高!",""); var area=wide*high/2;
if (isNaN(area)) {//判斷用戶是否輸入的是數字
alert("三角形的面積為"+area);
} else {
alert("您的輸入有誤!");
}
```
如果我們需要在其它地方使用此功能,那么最簡單的方法就是Ctrl+C然后Ctrl+V,使用函數可以節約一些代碼
```
function calcAngleArea() { //使用function關鍵字聲明一個函數,接著是函數的名稱,函數名稱必須符合變量的命名規范
//花括號用來表示一段代碼塊
var wide=window.prompt("請輸入三角形的底邊長度!",""); var high=window.prompt("請輸入三角形的高!",""); var area=wide*high/2;
if (isNaN(area)) {
alert("您的輸入有誤!");
} else {
alert("三角形的面積為"+area);
}
}
```
但是寫了這樣了個計算三角形面積的函數之后,頁面打開時并沒有任何東西會出現,那是因為函數必須使用 “函數名()”這樣的語句來調用執行,所以我們還需要再添加一句calcAngleArea();如果要多次進行這樣的計算,只需多次調用些函數即可!(事實上,看到這樣的格式,我們發現,像alert(),prompt(),isNaN()這些也是函數,它們是系統內置的函數!)
```
//在之前我們已經聲明了計算三角形面積的函數calcAngleArea
calcAngleArea();
calcAngleArea();
calcAngleArea(); //將會進行三次這樣的計算
```
當然,我們可以對其進行一些改進,以使這個函數更好用
```
function calcAngleArea(wide,high) {//具有參數的函數,參數其實是一些變量,多個參數用“,”分隔
var area=wide*high/2;
if (isNaN(area)) {
alert("您的輸入有誤!");
} else {
alert("三角形的面積為"+area);
}
}
```
這樣,函數就具有伸縮性了,我們不必強制用戶在prompt彈窗中輸入內容。我們先測試一下函數如何執行
```
calcAngleArea(12,8);//傳入參數12和8,在函數內部執行。接著我們就看到了輸出
```
同樣,有時候我們并不是相讓用戶輸入某些值,也并不想將某些值輸給用戶。但現在這個計算三角形面積的函數不管我們想如何處理結果,它都只是在彈窗中將結果顯示給用戶。這個時候就用到了函數返回值的功能:
```
//在函數內部可以使用return語句將值返回給調用函數的上下文
function calcAngleArea(wide,high) { var area=wide*high/2;
if (isNaN(area) || !area) { return false;
alert("注意,一個函數中的return執行之后,函數就停止運行了,所以你不會看到我!");
} else { return area;
}
} var a=calcAngleArea(23,8);//執行函數,函數的返回值將會賦給變量a
if (a) {
document.write(a);//當函數有返回值時,我們可以以想要的任何方式來輸出a,而不是預先定義好的alert
}
```
這樣,這個函數的功能就是真正的無瑕眥的計算三角形面積的函數了(盡管看上去有些簡單),我們輸入寬和高,然后函數將其計算后將結果返回,如果只是像"calcAngleArea(23,8)"這樣調用函數的話,返回的結果將會丟失,所以我們用一個變量將結果保存了下來。
## 函數所帶來的作用域問題
在函數內部聲明的變量(局部變量),在函數外部并不能訪問
```
function demo() { var a="外面不能訪問我!";
} //alert(a);//出錯,沒有聲明變量a
demo();//執行函數
alert(a);//仍然出錯
```
但在函數外部聲明的變量(全局變量),在函數內部是可以訪問的
```
function demo() { //在一個腳本中,使用function關鍵字聲明的具有名稱的函數在腳本中出現的次序是任意的,并不存在先后之分
alert(globalVar);
} //demo();//出錯,執行時變量globalVar還沒有聲明
var globalVar="Hello!";
demo();//輸出Hello!
```
## 內置對象Math與Date
Math對象為我們提供了很多用于數學計算的方法和一些常量
```
alert(Math.PI);//輸出π
alert(Math.pow(10,3));//輸出10的3次方
alert(Math.abs(-12));//輸出-12的絕對值
var num=23.34;
alert(Math.ceil(num));//返回大于等于num的最小整數
alert(Math.floor(num));//返回小于等于num的最大整數。
alert(Math.round(num));//返回與num最接近的整數(四舍五入)。
alert(Math.random());//返回介于 0 和 1 之間的偽隨機數。產生的偽隨機數介于 0 和 1 之間(含 0,不含 1)
alert(Math.max(2,3,4));//返回多個數值參數中較大的那個
alert(Math.min(2,3,1));//返回多個數值參數中較小的那個
alert(Math.sqrt(2));//返回一個數的平方根
alert(Math.SQRT2);//返回2的平方根
alert(Math.SQRT1_2);//返回二分之一的平方根
```
Date對象像一個時光機
```
var d = new Date();//Date對象需要創建
//Date 對象能夠表示的日期范圍約等于 1970 年 1 月 1 日前后各 285,616 年。
alert(d);//直接輸出這個對象,將會得到一個表示時間的字符串
//這個對象有一些方法,可以用來獲取時間的各個部分
alert(d.getYear());//獲取年,2000年以前返回年份后兩位,2000年之后的返回年份的完整表達方式
alert(d.getFullYear());//始終返回年份的4位數表達方式
alert(d.getMonth());//返回月份,注意,月份是從0開始計數的,所以1月時將返回0
alert(d.getDate());//返回今天幾號
alert(d.getDay());//返回今天星期幾,星期天是0,星期1是1....
alert(d.getHours());//返回小時
alert(d.getMinutes());//返回分鐘
alert(d.getSeconds());//返回秒
alert(d.getMilliSeconds());//返回毫秒
alert(d.getTime()); //返回一個整數值,這個整數代表了從1970年1月1日開始計算到Date對象中的時間之間的毫秒數
//日期的范圍大約是1970年1月1日午夜的前后各285616年,負數代表1970年之前的日期
```
我們不但能從中獲取時間值,還可以設置時間值
```
var d = new Date();
d.setFullYear(1990);//設置年份為1900
alert(d.getFullYear());//返回1900
alert(d.getTime());//輸出的值是負的,這驗證了上面所說的getTime()返回值
```
與那些getXXX方法對應的設置時間的函數僅僅是將get改成set
```
var d=new Date();
d.setFullYear(2004);
d.setMonth(11);//設置月份為12月,注意月份是從0開始計數的
d.setDate(2);
d.setHours(6);
d.setMinutes(12);
d.setSeconds(12);
alert(d.getDay());//輸出2004年12月2日星期幾
//setXXX這樣的方法有個最大的好處就是如果我們設置了錯誤的值,腳本并不會出錯,但日期會自動更正
d= new Date();
d.setYear(2003);
d.setMonth(1);//月份從0開始計數
d.setDate(31);//2月從來不會有31號
alert(d);//輸出日期,發現會是3月3號
```
運用Date對象這個自動更正的好處,我們可以用它來判斷用戶輸入的日期是否是有效的
```
//讓用戶輸入生日
var year=window.prompt("請輸入出生年份!","")*1; var month=window.prompt("請輸入出生月份!","")*1; var date = window.prompt("請輸入出生日!","")*1; if (!year || !month || !date) {//NaN轉換成布爾值將會是false
alert("您的輸入有誤!");
} else { var timeMachine=new Date();
timeMachine.setFullYear(year);
timeMachine.setMonth(month-1);//記住,月份是從0開始計數的
timeMachine.setDate(date); var trueYear = timeMachine.getFullYear(); var trueMonth = timeMachine.getMonth()+1;//記住,月份是從0開始計數的
var trueDate = timeMachine.getDate(); if (trueYear != year || trueMonth != month || trueDate != date) {
alert("您撒謊!");
} else {
alert("雖然這個時光機能知道輸入的日期是否有效,至于人是不是在那天生的,它是不能去看一看的!");
}
}
```
- 介紹
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超鏈接和路徑
- 第 5 章 分組元素
- 第 6 章 表格元素
- 第 7 章 文檔元素
- 第 8 章 嵌入元素
- 第 9 章 音頻和視頻
- 第 10 章 表單元素[上]
- 第 10 章 表單元素[中]
- 第 10 章 表單元素[下]
- 第 11 章 全局屬性和其他
- 第 12 章 CSS 入門
- 第 13 章 CSS 選擇器[上]
- 第 14 章 CSS 顏色與度量單位
- 第 15 章 CSS 文本樣式[上]
- 第 15 章 CSS 文本樣式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 邊框與背景[上]
- 第 17 章 CSS 邊框與背景[下]
- 第 18 章 CSS 表格與列表
- 第 19 章 CSS 其他樣式
- 第 20 章 CSS3 前綴和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 邊框圖片效果
- 第 24 章 CSS3 變形效果[下]
- 第 25 章 CSS3 過渡效果
- 第 26 章 CSS3 動畫效果
- 第 27 章 CSS 傳統布局[上]
- 第 27 章 CSS 傳統布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 彈性伸縮布局[上]
- 第 29 章 CSS3 彈性伸縮布局[中]
- 第 29 章 CSS3 彈性伸縮布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介紹
- 第 2 章 排版樣式
- 第 3 章 表格和按鈕
- 第 4 章 表單和圖片
- 第 5 章 柵格系統
- 第 6 章 輔組類和響應式工具
- 第 7 章 圖標菜單按鈕組件
- 第 8 章 輸入框和導航組件
- 第 9 章 路徑分頁標簽和徽章組件
- 第 10 章 巨幕頁頭縮略圖和警告框組件
- 第 11 章 進度條媒體對象和 Well 組件
- 第 12 章 列表組面板和嵌入組件
- 第 13 章 模態框插件
- 第 14 章 下拉菜單和滾動監聽插件
- 第 15 章 標簽頁和工具提示插件
- 第 16 章 彈出框和警告框插件
- 第 17 章 按鈕和折疊插件
- 第 18 章 輪播插件
- 第 19 章 附加導航插件
- 第 20 章 項目實戰--響應式導航[1]
- 第 20 章 項目實戰--響應式輪播圖[2]
- 第 20 章 項目實戰--首頁內容介紹[上][3]
- 第 20 章 項目實戰--首頁內容介紹[下][4]
- 第 20 章 項目實戰--資訊內容[5,6]
- 第 20 章 項目實戰--案例和關于[7]
- javaScript 教程
- javascript快速入門1--JavaScript前世今生,HelloWorld與開發環境
- javascript快速入門2--變量,小學生數學與簡單的交互
- javascript快速入門3--分支判斷與循環
- javascript快速入門4--函數與內置對象
- javascript快速入門5--數組與對象
- javascript快速入門6--Script標簽與訪問HTML頁面
- javascript快速入門7--ECMAScript語法基礎
- javascript快速入門8--值,類型與類型轉換
- javascript快速入門9--引用類型
- javascript快速入門10--運算符,語句
- javascript快速入門11--正則表達式
- javascript快速入門12--函數式與面向對象
- javascript快速入門13--BOM——瀏覽器對象模型(Browser Object Model)
- javascript快速入門14--DOM基礎
- javascript快速入門15--節點
- javascript快速入門15--表單
- javascript快速入門16--表格
- javascript快速入門17--事件
- javascript快速入門18--樣式
- javascript快速入門19--定位
- javascript快速入門20--Cookie
- javascript快速入門21--DOM總結
- javascript快速入門22--Ajax簡介
- javascript快速入門23--XHR—XMLHttpRequest對象
- javascript快速入門24--XML基礎
- javascript快速入門25--瀏覽器中的XML
- javascript快速入門26--XPath
- javascript快速入門27--XSLT基礎
- PHP 教程
- 第一章 如何加載運行已發布的PHP項目
- 第二章 PHP基礎
- 第三章 操作符與控制結構
- 第四章 數學運算
- 第五章 數組
- 第六章 目錄與文件
- 第七章 自定義函數
- 第八章 字符串處理
- 第九章 正則表達式
- 第十章 日期與時間
- 第十一章 表單與驗證
- 第十二章 會話控制
- 第十三章 上傳文件
- 第十四章 處理圖像
- 第十五章 MySQL 數據庫
- 第十六章 PHP 操作MySQL
- 第十七章 面向對象基礎
- 第十八章 面向對象的特性
- 第十九章 面向對象的工具