日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

深入理解javascript函数

發(fā)布時間:2023/12/4 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解javascript函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

函數(shù)實際上是對象,每個函數(shù)都是Function類型的實例,且與其他類型一樣具有屬性和方法.由于函數(shù)是對象,故函數(shù)名即為指向函數(shù)的指針,正是由于這一點,函數(shù)沒有重載,重復(fù)定義函數(shù)只會后者替換前者.

函數(shù)的定義

函數(shù)的定義有三種:

  • 函數(shù)聲明

function sum(num1,num2){ return num1+num2; }
  • 函數(shù)表達(dá)式

var sum=function(sum1,sum2){return sum1+sum2; }
  • 使用Function構(gòu)造函數(shù)(不推薦使用)

var sum=new Function('num1','num2','return num1 + num2;');

注:函數(shù)聲明和函數(shù)表達(dá)式的唯一區(qū)別是函數(shù)聲明會提前.意即函數(shù)調(diào)用在函數(shù)聲明之前可以正常運行.

作為值的函數(shù)

前面提到函數(shù)是對象,所以函數(shù)也可以作為參數(shù)值或返回值.

//作為參數(shù) function callSomeFunction(someFunction,someArgument){ reuturn someFunction(someArgument); }function add10(num){ return num+10; }var result=callSomeFunction(add10,10); alert(result); //20//作為返回值 function createCompareFunction(propertyName){return function(object1,object2){var value1 = object1[propertyName];var value2 = object2[propertyName];if(value1 < value2){return -1;}else if(value1 > value2){return 1;}else{return 0;}} }

函數(shù)內(nèi)部屬性

在函數(shù)內(nèi)部有兩個特殊對象:arguments this
arguments是一個類數(shù)組對象,包含傳入函數(shù)中的所有參數(shù)(這是其主要用途),除此之外,其還有一個callee的屬性,該屬性是一個指針,指向當(dāng)前函數(shù)對象.
this引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對象.在調(diào)用函數(shù)之前,this的值是不確定的,當(dāng)在全局對象中調(diào)用函數(shù)時,this引用的是全局對象window,當(dāng)把函數(shù)賦值給某對象時,this指的是此對象.

window.color = "red"; function sayColor(){ alert(color); } sayColor(); //redvar o={color:'blue'}; o.sayColor = sayColor; o.sayColor();//blue

函數(shù)的屬性和方法

  • 屬性
    length:函數(shù)希望接收的命名參數(shù)的個數(shù).
    prototype:這是一個非常耐人尋味的屬性,它保存著函數(shù)的實例方法,意即到通過函數(shù)實例化得到的對象可以訪問prototype中的方法.此屬性在自定義引用類型和實現(xiàn)繼承很有用處.

  • 方法
    apply call這兩個方法是函數(shù)的非繼承方法.用途都是設(shè)置函數(shù)體內(nèi)this對象的值.

  • apply接收兩個參數(shù),第一個是運行函數(shù)的作用域,通俗的說就是將這個參數(shù)作為this指向的值.第二個參數(shù)是數(shù)組作為執(zhí)行函數(shù)的參數(shù).

    function sum(num1,num2){ return num1+num2; } function callSum(num1,num2){ return sum.apply(this,arguments); } alert(callSum(10,10)); //20

    call接收的第一個參數(shù)也是運行函數(shù)的作用域,后面的參數(shù)也是傳遞給執(zhí)行函數(shù)的參數(shù),與apply不同的是,后面的參數(shù)并非數(shù)組,而是逐個列舉出來的.

    function sum(sum1,sum2){ return sum1+sum2; } function callSum(num1,num2){ return sum.call(this,num1,num2); } alert(callSum(10,10)); //20

    構(gòu)造函數(shù)

    ECMAScript中的構(gòu)造函數(shù)可以創(chuàng)建特定類型的對象.內(nèi)置的構(gòu)造函數(shù)(例如Array Object)會自動出現(xiàn)在執(zhí)行環(huán)境中.構(gòu)造函數(shù)的首字母應(yīng)該以大寫字母開頭,從而區(qū)分非構(gòu)造函數(shù).
    要創(chuàng)建新的實例,必須使用new操作符,穿件新的實例會經(jīng)歷以下四個步驟:

  • 創(chuàng)建一個新對象

  • 將構(gòu)造函數(shù)的作用域賦值給新對象(因此this指向這個新對象);

  • 指向構(gòu)造函數(shù)中的代碼.

  • 返回新對象

  • function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; }var person=new Person('Mr pu',24,'web developer');

    構(gòu)造函數(shù)與普通函數(shù)的區(qū)別在于構(gòu)造函數(shù)在實例化時加了new關(guān)鍵字.其它地方完全一樣.

    重要提示 在通過構(gòu)造函數(shù)實例化對象時,請勿把方法放在構(gòu)造函數(shù)中,因為每個函數(shù)(在這里指方法方法)都是對象,每次實例化一個對象時這個對象中會保存每一構(gòu)造函數(shù)中的方法,這是很影響性能的.解決辦法是把這些方法放在prototype屬性中.

    總結(jié)

    以上是生活随笔為你收集整理的深入理解javascript函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。