摘要:類型與函數的概念函數這樣的一段代碼它只定義一次但是可能被執行或調用多次類型是提供的引用類型之一通過類型創建對象在中函數也是對象的形式存在注意每個函數都是以個對象與函數函數聲明方式示例代碼一笑一人生字面量方式示例代碼一花一世界判斷函數是否為類
Function類型 Function與函數的概念
函數這樣的一段JavaScript代碼,它只定義一次,但是可能被執行或調用多次
Function類型是JavaScript提供的引用類型之一,通過Function類型創建Function對象
在JavaScript中函數也是對象的形式存在.
注意: 每個函數都是以個Function對象
Function與函數 1.函數聲明方式示例代碼:
function fun() { console.log("一笑一人生"); }2.字面量方式
示例代碼:
var fn = function () { console.log("一花一世界"); }; // 判斷函數是否為Function類型的 console.log(fun instanceof Function);//調用結果為 true console.log(fn instanceof Function);//調用結果為 true //JavaScript中所有的函數都是Function類型的對象3.創建Function類型的對象 - 就是一個函數
語法:
var 函數名 = new Function(參數,函數體);
由于函數的參數和函數體都是以字符串形式傳遞給Function的
示例代碼:
var f = new Function("a","console.log(a)"); f(100);//以函數方式進行調用Object與Function
示例代碼:
//1. Object與Function都是自身的類型 console.log(Object instanceof Object);//調用結果為 true console.log(Function instanceof Function);//調用結果為 true //2. Object自身是構造函數,而構造函數也是函數,是函數都是Function類型 console.log(Object instanceof Function);//調用結果為 true //3. Function是引用類型,用于創建對象,是對象都是Object類型 console.log(Function instanceof Object);//調用結果為 true代碼的執行流程
示例代碼:
// 變量的聲明提前 console.log(v);//調用結果為 undefined var v = 100; // 如果使用函數聲明方式定義函數時 - 函數的聲明提前 fun();//調用結果為 一花一世界 function fun() { console.log("一花一世界"); }
代碼的執行流程分析圖:
apply(thisArg,argArray)方法 - 用于調用一個指定的函數
參數
thisArg參數 - 可選項,在func函數運行時使用的this值
argArray參數 - 數組,作為參數(實參)的列表
返回值 - 調用該函數的返回結果
示例代碼:
// 定義函數 function fun(value) { console.log("一花一世界" + value); } //函數的調用方式 // 語法結構 : 函數名稱() fun("一笑一人生");//調用結果為 一花一世界一笑一人生 fun.apply(null,["一葉一孤城"]);//調用結果為 一花一世界一葉一孤城Function的call()方法
Function的call()方法用于調用一個函數,并接收指定的this值作為參數,以及參數列表
thisArg參數 - 在func函數運行時使用的this值
arg1,arg2...參數 - 指定的參數類表
返回值 - 調用該函數的返回值
示例代碼:
//定義函數 function fun(value,value2) { console.log("一花一世界" + value + value2); } // 函數的調用方式 //語法結構 : 函數名稱() fun("一笑一人生","極樂世界");//調用結果為 一花一世界一笑一人生極樂世界 fun.apply(null,["一笑一人生","走你"]);//調用結果為 一花一世界一笑一人生走你 // call()方法 - 用于調用一個函數 fun.call(null,"一笑一人生","一葉一菩提");//調用結果為 一花一世界一笑一人生一葉一菩提Function的bind()方法
Function的bind()方法用于創建一個新的函數(稱為綁定函數),并接收指定的this值作為參數,以及參數列表
bind(thisArg,arg1,arg2,...)方法
作用 - 用于創建一個新函數(稱為綁定函數)
參數
thisArg參數 - 當綁定函數被調用時,該參數會作為原函數運行時的this指向
arg1, arg2,...參數 - 當綁定函數被調用時,這些參數將置于實參之前傳遞給被綁定的方法 (表示參數列表)
返回值 - 返回新的函數
示例代碼:
//定義函數 function fun(value) { console.log("一花一世界" + value); } /* var f = fun.bind();// 相對于從指定函數復制一份出來 console.log(f); f();*/ fun("一笑一人生");// 調用結果為 一花一世界一笑一人生 var f = fun.bind(null,"一葉一菩提"); f();// 調用結果為 一花一世界一葉一菩提重載是什么
重載的含義:
定義多個同名的函數,但具有數量不同的參數
調用函數,根據傳遞參數的個數調用指定的函數
注意: JavaScript中函數沒有重載如果同時定義多個同名的函數時,則只有最后一個定義的函數時有效的
示例代碼:
function add(a,b){ return a + b; } function add(a,b,c){ return a + b + c; } function add(a,b,c,d){ return a + b + c + d; } //理想效果: add(1,2);// 3 add(1,2,3);// 6 add(1,2,3,4);// 10 //實際效果: // JavaScript的函數不存在重載 -> 當函數同名時,最后一次定義的函數有效 console.log(add(1,2));// NaN console.log(add(1,2,3));// NaN console.log(add(1,2,3,4));// 10arguments對象
JavaScript提供arguments對象
該對象存儲當前函數中所有的參數(指的是實參) - 類數組對象
應用場景 - 該對象一般用于函數中
作用 - 用于獲取當前函數的所有參數
屬性
length - 函數所有參數(指的是實參)的個數
用法 - 模擬實現函數的重載
示例代碼:
function add() { var num = arguments.length; switch (num) { case 2: return arguments[0] + arguments[1]; break; case 3: return arguments[0] + arguments[1] + arguments[2]; break; case 4: return arguments[0] + arguments[1] + arguments[2] + arguments[3]; } } console.log(add(1,2));//調用結果為 3 console.log(add(1,2,3));//調用結果為 6 console.log(add(1,2,3,4));//調用結果為 10函數的遞歸
函數的遞歸 - 就是在指定函數的函數體中調用自身函數
示例代碼:
function fun() { // 當前函數的邏輯內容 console.log("this is function"); // 調用自身函數 - 實現遞歸 fun(); } fun();
控制臺效果解析圖:
示例代碼:
function fn(v) { console.log(v); /* 語句判斷 */ if (v >= 10) { /* 結束語句循環 */ return; } //fn(v + 1); arguments.callee(v + 1); } //fn(0); var f = fn; fn = null; f(0); console.log(f);
控制臺調用圖:
JavaScript語法中,定義函數必須定義函數名稱 -> 匿名函數
匿名函數的作用:
將匿名函數作為參數傳遞給其他函數 -> 回調函數
將匿名函數用于執行一次性任務 -> 自調函數
回調函數當一個函數為參數傳遞給另一個函數時,作為參數的函數被稱之為回調函數
示例代碼:
// 作為另一個函數(fn)的參數的函數(one) - 回調函數 var one = function(){ return 1; } function fn(v){ return v(); } // one函數僅是作為fn函數的參數出現 - 并不是調用 // var result = fn(one); /* 以上代碼等價于以下代碼 以下代碼中作為參數的函數 - 匿名回調函數 */ var result = fn(function(){return 1;}); console.log(result);// 1
回調函數分析圖:
示例代碼:
// 作為另一個函數(fn)的參數的函數(one) -> 回調函數 var one = function(w){ return w; } function fn(v){// 形參是一個函數 return v(100);// 函數的調用體 } // var result = fn(one);// 實參必須是一個函數 var result = fn(function(w){return w;}); console.log(result);
回調函數的參數的分析圖:
自調函數 - 定義即調用的函數
第一個小括號 - 用于定義函數
第二個小括號 - 用于調用函數
示例代碼:
// 全局作用域 - 生命周期:JavaScript文件從執行到執行完畢 (function(value){ // 函數作用域 - 生命周期:從函數調用到調用完畢 console.log("一花一世界" + value); })("一葉一菩提"); // 表達式語法 (function(value){ // 函數作用域 - 生命周期:從函數調用到調用完畢 console.log("一花一世界" + value); }("一笑一人生"));作為值的函數
將一個函數作為另一個函數的結果進行返回,作為結果為返回的函數稱之為止的函數
示例代碼:
var one = function(){ return 100; }; // 作為值的函數 -> 內部函數的一種特殊用法 function fun(){ var v = 100; // 內部函數 return function(){ return v; }; } var result = fun(); console.log(fun()());// 調用結果為 100作用域鏈
示例代碼:
var a = 10;// 全局變量 function fun(){ var b = 100;// fun函數作用域的局部變量 // 內部函數 function fn(){ var c = 200;// fn函數作用域的局部變量 // 內部函數 function f(){ var d = 300;// f函數作用域的布局變量 // 調用變量 console.log(a);// 10 console.log(b);// 100 console.log(c);// 200 console.log(d);// 300 } f(); // 調用變量 // console.log(a);// 10 // console.log(b);// 100 // console.log(c);// 200 // console.log(d);// d is not defined } fn(); // 調用變量 // console.log(a);// 10 // console.log(b);// 100 // console.log(c);// c is not defined // console.log(d);// d is not defined } fun();
作用域鏈的分析圖:
閉包是什么:
JavaScript允許函數嵌套,并且內部函數可以訪問定義在外部函數中的所有變量和函數,以及外部函數能訪問的所有變量和函數.但是外部函數卻不能夠訪問定義在內部函數中的變量和函數
示例代碼:
var n;// 定義變量,但不初始化值 function fun() {// 函數作用域 var v = 100; // 進行初始化值 - 一個函數 n = function () { console.log(v); }; // n(); } fun(); n();// 調用結果為 100閉包的特點與作用
閉包的特點:
局部變量: 在函數中定義有共享意義(比如: 緩存,計數器等等)的局部變量
內部函數: 在函數(f)中聲明有內嵌函數,內嵌函數(g)對函數(f)中的局部變量進行訪問
外部使用: 函數(f)向外返回此內嵌函數(g),外部可以通過此內嵌函數持有并訪問聲明在函數(f)中的局部變量,而此變量在外部是通過其他途徑無法訪問的
閉包的作用:
提供可共享的局部變量
保護共享的局部變量.提供專門的讀寫變量的函數
避免全局污染
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108220.html
摘要:錯誤與異常錯誤與異常概念所謂錯誤就是錯誤就是程序中不正常的運行狀態在其他編程語言中稱為異常或錯誤解釋器會為每個錯誤情況創建并且拋出一個對象對象包含錯誤的描述信息語句語句作用用于捕獲和處理代碼中的錯誤語句作用用于處理語句中出現的錯誤語句 錯誤與異常 錯誤與異常概念 所謂錯誤就是錯誤就是程序中不正常的運行狀態 在其他編程語言中稱為異常或錯誤 解釋器會為每個錯誤情況創建并且拋出一個Erro...
摘要:原型原型是什么所謂原型就是類型對象的一個屬性在函數定義時就包含了屬性它的初始值是以個空對象在中并沒有定義函數的原型類型所以原型可以是任何類型原型是用于保存對象的共享屬性和方法的原型的屬性和方法并不會影響函數本身的屬性和方法示例代碼類型的屬性 原型 原型是什么 所謂原型(Prototype)就是Function類型對象的一個屬性 在函數定義時就包含了prototype屬性,它的初始值是...
摘要:類型檢測數組示例代碼調用結果為方法作用用于判斷當前對象的數據類型結果特點可以準確判斷出當前變量的類型調用結果為調用結果為報錯調用結果為調用結果為方法判斷指定類型是否出現在當前對象的原型鏈中調用結果為轉換數組提供了兩種方法用于數組的轉 Array類型 檢測數組 示例代碼: var arr = [1,2,3,4,5]; console.log(arr instanceof Array);/...
摘要:關鍵字關鍵字描述本身沒有任何含義但它也可以代表任何含義被自動定義在所有的函數作用域中都有一個共同點它總是要返回一個對象指向哪個對象不取決于定義在哪它取決于調用位置注意建議搞不明白時盡量不要使用否則會很混亂一定要理解之后使用的基本用法表示在函 this關鍵字 this關鍵字描述 this本身沒有任何含義,但它也可以代表任何含義 this被自動定義在所有的函數作用域中 this都有一個共...
摘要:繼承原型鏈所謂言行鏈就是如果構造函數或對象的原型指向構造函數或對象的原型再指向構造函數或對象以此類推最終的構造函數或對象的原鄉指向的原型由此形成一條鏈狀結構被稱之為原型鏈示例代碼原型鏈通過構造函數創建對象將的原型指向對象通過構造函數創建對象 繼承 原型鏈 所謂言行鏈就是如果構造函數或對象A,A的原型指向構造函數或對象B,B的原型再指向構造函數或對象C,以此類推,最終的構造函數或對象的原...
閱讀 4412·2021-11-19 09:59
閱讀 3329·2021-10-12 10:12
閱讀 2641·2021-09-22 15:25
閱讀 3336·2019-08-30 15:55
閱讀 1192·2019-08-29 11:27
閱讀 1472·2019-08-28 18:06
閱讀 2742·2019-08-26 13:41
閱讀 2562·2019-08-26 13:41