摘要:一類型概述與函數(shù)函數(shù)聲明方式字面量方式判斷函數(shù)是否為類型中所有函數(shù)都是類型的對(duì)象創(chuàng)建類型的對(duì)象是個(gè)函數(shù)函數(shù)名參數(shù)函數(shù)體由于函數(shù)的參數(shù)和函數(shù)體都是以字符串形式傳遞給以函數(shù)方式進(jìn)行調(diào)用屬性定義一個(gè)構(gòu)造函數(shù)犬夜叉使用構(gòu)造函數(shù)創(chuàng)建對(duì)象對(duì)象具有與構(gòu)
JS(JavaScript)
一.Function類型
概述
1.Function與函數(shù);
// 函數(shù)聲明方式 function fun(){ console.log("you my function"); } // 字面量方式 var fn = function(){ console.log("you my function too"); } // 判斷函數(shù)是否為Function類型 console.log(fun instanceof Function);// true console.log(fn instanceof Function);// true // JS中所有函數(shù)都是Function類型的對(duì)象 /* 3.創(chuàng)建Function類型的對(duì)象-是個(gè)函數(shù) var 函數(shù)名 = new Function(參數(shù),函數(shù)體); * 由于函數(shù)的參數(shù)和函數(shù)體都是以字符串形式傳遞給Function */ var f = new Function("a","console.log(a)"); f(100);// 以函數(shù)方式進(jìn)行調(diào)用
contstructor屬性
// 定義一個(gè)構(gòu)造函數(shù) function Hero(){ this.name = "犬夜叉"; this.sayMe = function(){ console.log("this is function"); } } // 使用構(gòu)造函數(shù)創(chuàng)建對(duì)象 var hero = new Hero(); // 對(duì)象具有與構(gòu)造函數(shù)相同屬性和方法 console.log(hero.name); hero.sayMe(); // JavaScript中所有對(duì)象都是Object類型 console.log(hero.constructor);
Function的length屬性
// Function類型的length屬性-獲取函數(shù)的參數(shù)(形參)個(gè)數(shù) function fn(){ console.log("you my Inuyasha"); } fn(1,2,3,4,5); console.log(fn.length);// 0
2.Function類型;
Function的apply()方法;
以指定this值,調(diào)用個(gè)函數(shù),數(shù)組作為個(gè)參數(shù)
// 定義函數(shù) function fun(value){ console.log("this is " + value); } // 函數(shù)的調(diào)用方式 fun("function");// 語法結(jié)構(gòu):函數(shù)名稱() /* apply(thisArg,argArray)方法 -> 用于調(diào)用一個(gè)指定函數(shù) * 參數(shù) * thisArg - this * argArray - 數(shù)組,作為參數(shù)(實(shí)參)的列表 */ fun.apply(null, ["function"]);
Function的call()方法;
以指定this值為參數(shù),調(diào)用個(gè)函數(shù),以及參數(shù)列表
// 定義函數(shù) function fun(value, value2){ console.log("this is " + value); } // 函數(shù)的調(diào)用方式 fun("function", "犬夜叉");// 語法結(jié)構(gòu):函數(shù)名稱() fun.apply(null, ["function","犬夜叉"]); // call()方法 -> 用于調(diào)用一個(gè)函數(shù) fun.call(null, "function", "犬夜叉");
Function的bind()方法;
以指定this值為參數(shù),創(chuàng)建個(gè)新函數(shù),以及參數(shù)列表
// 定義函數(shù) function fun(value){ console.log("this is " + value); } /* bind(thisArg, arg1, arg2, ...)方法 * 作用 - 用于創(chuàng)建一個(gè)新函數(shù)(稱為綁定函數(shù)) * 參數(shù) * thisArg - this * arg1, arg2, ... - 表示參數(shù)列表 * 返回值 - 返回新的函數(shù) */ // var f = fun.bind();// 相對(duì)于從指定函數(shù)復(fù)制一份出來 // console.log(f); // f(); fun("桔梗");// this is 桔梗 var f = fun.bind(null, "犬夜叉"); f();// this is 犬夜叉
沒有重載;
在JS中函數(shù)是很么重載現(xiàn)象,如果同時(shí)定義多個(gè)同名函數(shù)的話,只有最后一個(gè)定義函數(shù)是有效的
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; } /*重載含義 * 定義多個(gè)同名函數(shù),但具有數(shù)量不同的參數(shù) * 調(diào)用函數(shù),根據(jù)傳遞參數(shù)的個(gè)數(shù)調(diào)用指定函數(shù) */ add(1,2); add(1,2,3); add(1,2,3,4); //JavaScript函數(shù)不存在重載 - 當(dāng)函數(shù)同名時(shí),最后一次定義函數(shù)有效 console.log(add(1,2));//NaN console.log(add(1,2,3));//NaN console.log(add(1,2,3,4));//10
/* 重載的含義 1.定義多個(gè)同名的函數(shù),但具有數(shù)量不同的參數(shù) 2.調(diào)用函數(shù),根據(jù)傳遞參數(shù)的個(gè)數(shù)調(diào)用指定的函數(shù) */ 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的函數(shù)不存在重載 -> 當(dāng)函數(shù)同名時(shí),最后一次定義的函數(shù)有效 console.log(add(1,2));// NaN console.log(add(1,2,3));// NaN console.log(add(1,2,3,4));// 10
arguments對(duì)象
arguments對(duì)象也是個(gè)類數(shù)組對(duì)象
length屬性-函數(shù)實(shí)參的個(gè)數(shù)
用于接收函數(shù)參數(shù)相當(dāng)于實(shí)參
/*function fn(){ console.log(arguments[0]); } console.log(fn.arguments);// null fn(1,2,3,4);*/ // 模擬函數(shù)的重載效果 function add(){ var len = arguments.length; switch (len) { 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]; break; } } console.log(add(1,2));// 3 console.log(add(1,2,3));// 6 console.log(add(1,2,3,4));// 10
遞歸;
在一個(gè)函數(shù)的函數(shù)內(nèi)部,調(diào)用自身函數(shù),有兩種方法;
使用自身函數(shù)名實(shí)現(xiàn)
使用arguments對(duì)象的callee屬性實(shí)現(xiàn)
//函數(shù)遞歸 - 指定函數(shù)的函數(shù)體中調(diào)用自身函數(shù) /*function fun(){ // 當(dāng)前函數(shù)的邏輯內(nèi)容 console.log("you my function"); // 調(diào)用自身函數(shù) -> 實(shí)現(xiàn)遞歸 fun(); } fun(); */ function fn(v) { console.log(v); if (v >= 10) { return; } arguments.callee(v + 1); } var f = fn; fn = null; f(0); // console.log(f);
3.特殊函數(shù);
匿名函數(shù);
函數(shù)可以作為數(shù)據(jù)使用,作為函數(shù)自己,跟普通數(shù)據(jù)一樣,不一定有名字
/* * function (){ * console.log("you my function"); }*/ /*匿名函數(shù)的作用: 將匿名函數(shù)作為參數(shù)傳遞給其他函數(shù) -> 回調(diào)函數(shù) 將匿名函數(shù)用于執(zhí)行一次性任務(wù) -> 自調(diào)函數(shù) */
回調(diào)函數(shù);
當(dāng)個(gè)函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù)為回調(diào)函數(shù)
var one = function () { return 1; } function fn(v) { return v(); } //one函數(shù)是作為fn函數(shù)參數(shù)出現(xiàn) - 并不是調(diào)用 //var result = fn(one); /*等價(jià)于一些代碼*/ var result = fn(function(){return 1;}); console.log(result);//1 /*代碼中作為參數(shù)函數(shù)- 匿名回調(diào)函數(shù)*/
自調(diào)函數(shù);
定義函數(shù)后自行調(diào)用
第一個(gè)小括號(hào)- 定義函數(shù)
第二個(gè)小括號(hào)- 調(diào)用函數(shù)
/* * 自調(diào)函數(shù) - 定義即調(diào)用函數(shù) * 第一個(gè)小括號(hào)- 定義函數(shù) * 第二個(gè)小括號(hào)- 調(diào)用函數(shù) */ //全局作用域 -生命周期;JS(JavaScript)文件從執(zhí)行到執(zhí)行完畢 (function (value) { console.log("you my" + value); // 函數(shù)作用域 -生命周期;從函數(shù)調(diào)用到調(diào)用完畢 })("function"); (function (value){ console.log("you my" + value); // 函數(shù)作用域 -生命周期;從函數(shù)調(diào)用到調(diào)用完畢 }("function")); !function (value) { console.log("you my" + value); // 函數(shù)作用域 -生命周期;從函數(shù)調(diào)用到調(diào)用完畢 }("function"); +function (value) { console.log("you my" + value); // 函數(shù)作用域 -生命周期;從函數(shù)調(diào)用到調(diào)用完畢 }("function");
作為值得函數(shù);
將個(gè)函數(shù)作為另一個(gè)函數(shù)的結(jié)果進(jìn)行返回
var one = function () { return 100; } //作為值得函數(shù) -內(nèi)部函數(shù)的種特殊用法 function fun() { var v = 100; return function () { return v; }; } var result = fun(); console.log(result);//one函數(shù) console.log(result());//100 console.log(fun()());
4.閉包;
作用域鏈;
一段JS代碼,(全局代碼和函數(shù))都有個(gè)與關(guān)聯(lián)的作用域鏈,并將作用域是個(gè)對(duì)象列表和鏈表
var a = 10;//全局變量 function fun() { var b = 100;//fun函數(shù)作用域的局部變量 function fn() { var c = 200;//fn函數(shù)作用域的局部變量 function f() { var d = 300;//f函數(shù)作用域的布部變量 //調(diào)用變量 console.log(a);//10 console.log(b);//100 console.log(c);//200 console.log(d);//300 } f(); //調(diào)用變量 console.log(a);//10 console.log(b);//100 console.log(c);//200 console.log(d);//d is not defined } fn(); //調(diào)用變量 // console.log(a);//10 // console.log(b);//100 // console.log(c);//c is not defined // console.log(d);//d is not defined } fun();
閉包是什么;
且內(nèi)部函數(shù)可以訪問定義在外部函數(shù)中的變量和函數(shù),以及外部函數(shù)能訪問所有變量和函數(shù),外部函數(shù)不能訪問內(nèi)部函數(shù)中變量和函數(shù)
var n;//定義變量,但不初始化值 function fun() {//函數(shù)作用域 var v = 100; n = function(){ //進(jìn)行初始化值-一個(gè)函數(shù) console.log(v); } } fun(); n();//100
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108218.html
摘要:那你們肯定會(huì)問為什么共用,而沒有共用呢,下面就給你解釋,請(qǐng)看引用類型是共用的值類型是私用的。 引言 面向?qū)ο蟮木幊陶Z言都具繼承這一機(jī)制,而 JavaScript 是基于原型(Prototype)面向?qū)ο蟪绦蛟O(shè)計(jì),所以它的實(shí)現(xiàn)方式也是基于原型(Prototype)實(shí)現(xiàn)的. 繼承的方式 類式繼承 構(gòu)造函數(shù)繼承 組合繼承 原型式繼承 寄生式繼承 寄生組合式繼承 1.類式繼承 //聲明父...
摘要:之面向?qū)ο罂偨Y(jié)前言在中是沒有類的概念的,所以它的對(duì)象與基于類的語言中的對(duì)象不同。一理解對(duì)象張三上面通過構(gòu)造函數(shù)創(chuàng)建了一個(gè)對(duì)象,并為它添加了三個(gè)屬性。 JavaScript之面向?qū)ο罂偨Y(jié) 前言:在ECMAScript中是沒有類的概念的,所以它的對(duì)象與基于類的語言中的對(duì)象不同。ECMA-262把對(duì)象總結(jié)為:無序?qū)傩缘募?,其屬性包含基本值、?duì)象或者函數(shù)。 一、理解對(duì)象 var person...
摘要:應(yīng)該非常小心,避免出現(xiàn)不使用命令直接調(diào)用構(gòu)造函數(shù)的情況。上面代碼表示,使用屬性,確定實(shí)例對(duì)象的構(gòu)造函數(shù)是,而不是。當(dāng)然,從繼承鏈來看,只有一個(gè)父類,但是由于在的實(shí)例上,同時(shí)執(zhí)行和的構(gòu)造函數(shù),所以它同時(shí)繼承了這兩個(gè)類的方法。 基本概念 類和實(shí)例是大多數(shù)面向?qū)ο缶幊陶Z言的基本概念 類:類是對(duì)象的類型模板 實(shí)例:實(shí)例是根據(jù)類創(chuàng)建的對(duì)象但是,JavaScript語言的對(duì)象體系,不是基于類的,...
摘要:簡單回顧一下構(gòu)造函數(shù)原型和實(shí)例對(duì)象之間的關(guān)系每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象。找到生成構(gòu)造函數(shù)的原型對(duì)象的構(gòu)造函數(shù),搜索其原型對(duì)象,找到了。 JS面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承的實(shí)現(xiàn) - 原型鏈 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaS...
摘要:面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承繼承的實(shí)現(xiàn)借用構(gòu)造函數(shù)前言最近在細(xì)讀高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。繼承了注意,這一段代碼借調(diào)了超類型的構(gòu)造函數(shù)。 JS面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承-繼承的實(shí)現(xiàn)-借用構(gòu)造函數(shù) 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下...
閱讀 1386·2019-08-30 15:44
閱讀 2139·2019-08-30 11:04
閱讀 550·2019-08-29 15:17
閱讀 2580·2019-08-26 12:12
閱讀 3158·2019-08-23 18:09
閱讀 946·2019-08-23 15:37
閱讀 1554·2019-08-23 14:43
閱讀 2956·2019-08-23 13:13