国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript 函數(shù)總體概述(函數(shù)聲明/參數(shù)傳遞/返回值/加載/變量和作用域/變量聲明提升/匿名函數(shù)/回調(diào)函數(shù))

2019-11-06 07:23:52
字體:
供稿:網(wǎng)友
1. 函數(shù)的概念和定義函數(shù)就是可以重復(fù)執(zhí)行的代碼塊。① 函數(shù)聲明(自定義聲明)使用在定義之前或之后均可
function 函數(shù)名(形參) { }② 函數(shù)表達(dá)式(匿名函數(shù)法)注意:使用必須在定義之后
var 變量 = function(形參) { }③ Function對(duì)象(構(gòu)造函數(shù)法)注意:使用必須在定義之后
var 變量 = new Function(程序);2. 函數(shù)的參數(shù)定義:參與運(yùn)算的變量作用:為了擴(kuò)展函數(shù)的功能性,和與程序員的交互性,和代碼的復(fù)用性- 實(shí)參:實(shí)際參與運(yùn)算的變量- 形參:形式上參與運(yùn)算的變量,為實(shí)參占位置javaScript中的函數(shù)相對(duì)于其它語言的函數(shù)比較靈(特)活(殊)。在其它語言中實(shí)參個(gè)數(shù)必須和形參個(gè)數(shù)一致,但是Javascript中沒有函數(shù)簽名的概念,實(shí)參個(gè)數(shù)和形參個(gè)數(shù)可以不相等。JavaScript中沒有方法的重載。① 實(shí)參個(gè)數(shù) > 形參個(gè)數(shù):函數(shù)正常執(zhí)行,多余的參數(shù)不參與運(yùn)算② 實(shí)參個(gè)數(shù) = 形參個(gè)數(shù):函數(shù)正常執(zhí)行③ 實(shí)參個(gè)數(shù) < 形參個(gè)數(shù):未給定值的參數(shù)默認(rèn)為undefined,是報(bào)錯(cuò)還是NaN還是無法執(zhí)行,取決于函數(shù)內(nèi)部的邏輯
function fn(a,b) {    alert(a+b);    //實(shí)參個(gè)數(shù)和形參個(gè)數(shù)    console.log(fn.length);//打印:形參個(gè)數(shù)    console.log(arguments); //打印:實(shí)參個(gè)數(shù),arguments是一個(gè)對(duì)象(偽數(shù)組),裝載著所有的實(shí)參,必須在函數(shù)內(nèi)部使用}3. 函數(shù)的返回值有return函數(shù)就有值,沒有return函數(shù)就沒有值。函數(shù)內(nèi)部的變量如果外部想要使用,必須用return關(guān)鍵字返回,那么外部的變量才能接收。總結(jié):函數(shù)內(nèi)部,return后面的值就是返回值作用:函數(shù)執(zhí)行后剩下結(jié)果就是返回值
alert("你好");//有參數(shù),沒有返回值confirm("你好");//有參數(shù),有返回值,點(diǎn)擊確定返回true,點(diǎn)擊取消返回falsePRompt();//有參數(shù),有返回值,點(diǎn)擊確定返回輸入內(nèi)容,沒寫內(nèi)容默認(rèn)為空字符串,點(diǎn)擊取消返回null總結(jié)函數(shù)功能- 有時(shí)候我們用的是函數(shù)的邏輯- 有時(shí)候我們用的是函數(shù)的返回值- 而函數(shù)的參數(shù)是為了提高函數(shù)的功能性存在的函數(shù)的注意事項(xiàng)① 如果函數(shù)沒有顯式使用return語句,那么函數(shù)有默認(rèn)的返回值:undefined② 如果函數(shù)使用return語句,那么跟在return后面的值,就成了函數(shù)的返回值③ 如果函數(shù)使用return語句,但是return后面不跟任何值,那么函數(shù)的返回值也是undefined④ 函數(shù)使用return語句后,這個(gè)函數(shù)會(huì)在執(zhí)行完return語句之后停止并立即退出,return可以切斷函數(shù),它后面的代碼不會(huì)再執(zhí)行,但代碼也會(huì)被加載。⑤ 打印函數(shù)名,等于打印整個(gè)函數(shù);打印執(zhí)行函數(shù),等于打印返回值。(函數(shù)名+(),就是執(zhí)行函數(shù))4. 函數(shù)名、函數(shù)體和函數(shù)加載問題① 函數(shù)名是什么?函數(shù)名 == 整個(gè)函數(shù)② 函數(shù)加載問題JS加載的時(shí)候,只加載函數(shù)名,不加載函數(shù)體。所以如果想使用內(nèi)部的成員變量,需要調(diào)用函數(shù)。5. 變量和作用域(函數(shù)中的變量需要函數(shù)執(zhí)行之后才能使用)(1)全局變量和局部變量- 任何位置沒有var的都是全局變量(成員變量),或者函數(shù)之外用var定義的也是全局變量- 函數(shù)內(nèi)部有var的是局部變量,形參也是局部變量(2)隱式全局變量- 函數(shù)內(nèi)部沒有var的是全局變量
function  fn(){    var  a  =  b  =  c  =  1;   // b和c就是隱式全局變量(等號(hào))    var  a = 1;  b = 2;  c = 3;     // b和c就是隱式全局變量(分號(hào))    var  a = 1 ,  b = 2 ,  c = 3;    // b和c不是隱式全局變量(逗號(hào))}(3)其它- 函數(shù)內(nèi)部可以訪問到該函數(shù)所屬的外部作用域的變量(作用域鏈)- 不使用var聲明的變量是全局變量,不推薦使用。- 變量退出作用域之后會(huì)銷毀,全局變量關(guān)閉網(wǎng)頁或?yàn)g覽器才會(huì)銷毀6. 變量聲明提升(出現(xiàn)原因:預(yù)解析)就是在頁面加載完畢之后,js執(zhí)行之前,需要先預(yù)覽一遍整體的js代碼,把所有非function內(nèi)部的變量提升到頁面的最頂端。如果在定義變量之前使用了變量,就會(huì)出現(xiàn)變量聲明提升。- 使用變量的時(shí)候變量的值為undefined,計(jì)算后形成NaN- 變量聲明提升在全局和局部都是會(huì)出現(xiàn)的- 對(duì)于變量,只提升變量名,不提升變量值- 對(duì)于函數(shù),是整體提升的(詳細(xì)解析見后續(xù)文章)7. 匿名函數(shù)定義:沒有命名的函數(shù)作用:    ①不需要定義函數(shù)名的時(shí)候(一般用在綁定事件的時(shí)候)      ②書寫起來更簡便調(diào)用方法:    ① 直接調(diào)用
var fn = function() {}fn();    ② 自調(diào)用
(function(){alert(1)})();    ③ 事件綁定    ④ 定時(shí)器8. 函數(shù)是一種數(shù)據(jù)類型function9. 回調(diào)函數(shù)- 簡單理解:就是函數(shù)做為參數(shù)。- 復(fù)雜理解:回調(diào)函數(shù)就是一個(gè)通過函數(shù)調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)。
fn(1,2,demo1);//使用函數(shù)名就相當(dāng)于傳遞了整個(gè)函數(shù)function fn(num1,num2,fun){    var sum = fun(num1,num2);    alert(sum);}function demo1(n,m){    return n+m;}10. 遞歸定義:函數(shù)自己調(diào)用自己使用:必須有跳出條件(詳細(xì)解析見后續(xù)文章)11. 閉包定義:函數(shù)作為返回值
fn()();//第一個(gè)小括號(hào)是對(duì)fn的調(diào)用,調(diào)用后會(huì)返回一個(gè)值,后面的括號(hào)是對(duì)返回值的調(diào)用function fn(){    return function demo(){        alert(50);    }}(詳細(xì)解析見后續(xù)文章)12. parseInt 和 toString 問題parseInt把任何進(jìn)制轉(zhuǎn)換成10進(jìn)制
十進(jìn)制值 = parseInt(數(shù)值,進(jìn)制);toString把10進(jìn)制轉(zhuǎn)換成任何進(jìn)制
任何進(jìn)制值 = 十進(jìn)制值.toString(進(jìn)制);13. 參數(shù)傳遞問題func(num); //調(diào)用函數(shù)所謂的調(diào)用函數(shù)傳參就是將參數(shù)中的數(shù)據(jù)給函數(shù)中的參數(shù)變量賦值。調(diào)用函數(shù)的時(shí)候:-> 將參數(shù)拷貝一份-> 跳轉(zhuǎn)到函數(shù)體-> 進(jìn)入函數(shù)體之前將完成一次賦值,num = 被拷貝的值不嚴(yán)謹(jǐn)?shù)拿枋觯瑓?shù)傳遞就是參數(shù)賦值-> 如果傳遞的是值類型:值類型會(huì)被拷貝,拷貝的是數(shù)據(jù),因此在函數(shù)內(nèi)的變量,與函數(shù)外的變量是值相同的兩個(gè)不同變量,值類型在函數(shù)內(nèi)修改的變量以后,函數(shù)結(jié)束后,數(shù)據(jù)無影響。-> 如果傳遞的是引用類型:引用會(huì)被拷貝,拷貝的是地址,而數(shù)據(jù)還是只有一個(gè),也就是說,函數(shù)內(nèi)與函數(shù)外是兩個(gè)不同的變量,但是指向同一個(gè)對(duì)象,無論使用函數(shù)內(nèi),還是函數(shù)外的變量對(duì)該對(duì)象做操作,都是一樣的,因此在函數(shù)內(nèi)修改對(duì)象的成員,函數(shù)結(jié)束后,修改結(jié)果會(huì)保持下來。
小知識(shí)① 函數(shù)不調(diào)用不執(zhí)行② 函數(shù)名就等于(整個(gè)函數(shù))③ 加載函數(shù)的時(shí)候,只加載函數(shù)名,不加載函數(shù)體④ 參數(shù)相當(dāng)于局部變量⑤ 就近原則使用變量⑥ 兩個(gè)平級(jí)的函數(shù)中的變量不會(huì)相互影響(可以使用同樣的形參名)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 满洲里市| 安仁县| 涟源市| 东乡| 西乌珠穆沁旗| 元氏县| 禹城市| 巴青县| 林州市| 林周县| 万盛区| 广东省| 和顺县| 喀什市| 英德市| 托克托县| 泽普县| 东海县| 红原县| 汤阴县| 宣汉县| 睢宁县| 吉木萨尔县| 鄂尔多斯市| 蕲春县| 会泽县| 湟源县| 寻甸| 琼中| 木兰县| 高平市| 玉屏| 太康县| 金溪县| 新绛县| 徐闻县| 鄂托克旗| 烟台市| 玉门市| 吉林市| 柳江县|