成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【JavaScript】面向?qū)ο笾瓼unction類型

mingde / 2579人閱讀

摘要:一類型概述與函數(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

相關(guān)文章

  • 面向對(duì)象JavaScript繼承(一) 類式繼承

    摘要:那你們肯定會(huì)問為什么共用,而沒有共用呢,下面就給你解釋,請(qǐng)看引用類型是共用的值類型是私用的。 引言 面向?qū)ο蟮木幊陶Z言都具繼承這一機(jī)制,而 JavaScript 是基于原型(Prototype)面向?qū)ο蟪绦蛟O(shè)計(jì),所以它的實(shí)現(xiàn)方式也是基于原型(Prototype)實(shí)現(xiàn)的. 繼承的方式 類式繼承 構(gòu)造函數(shù)繼承 組合繼承 原型式繼承 寄生式繼承 寄生組合式繼承 1.類式繼承 //聲明父...

    forsigner 評(píng)論0 收藏0
  • javascript面向對(duì)象總結(jié)

    摘要:之面向?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...

    taowen 評(píng)論0 收藏0
  • 溫故知新javascript面向對(duì)象

    摘要:應(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ì)象體系,不是基于類的,...

    趙連江 評(píng)論0 收藏0
  • JS面向對(duì)象的程序設(shè)計(jì)繼承的實(shí)現(xiàn) - 原型鏈

    摘要:簡單回顧一下構(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...

    zhaochunqi 評(píng)論0 收藏0
  • JS面向對(duì)象的程序設(shè)計(jì)繼承-繼承的實(shí)現(xiàn)-借用構(gòu)造函數(shù)

    摘要:面向?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)人意,所以用自己所理解的,嘗試解讀下...

    duan199226 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<