摘要:函數實際上是對象每個函數都是類型的實例且與其他類型一樣具有屬性和方法由于函數是對象故函數名即為指向函數的指針正是由于這一點函數沒有重載重復定義函數只會后者替換前者函數的定義函數的定義有三種函數聲明函數表達式使用構造函數不推薦使用注函數聲明和
函數實際上是對象,每個函數都是Function類型的實例,且與其他類型一樣具有屬性和方法.由于函數是對象,故函數名即為指向函數的指針,正是由于這一點,函數沒有重載,重復定義函數只會后者替換前者.
函數的定義函數的定義有三種:
函數聲明
function sum(num1,num2){ return num1+num2; }
函數表達式
var sum=function(sum1,sum2){ return sum1+sum2; }
使用Function構造函數(不推薦使用)
var sum=new Function("num1","num2","return num1 + num2;");
注:函數聲明和函數表達式的唯一區別是函數聲明會提前.意即函數調用在函數聲明之前可以正常運行.
作為值的函數前面提到函數是對象,所以函數也可以作為參數值或返回值.
//作為參數 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; } } }函數內部屬性
在函數內部有兩個特殊對象:arguments this
arguments是一個類數組對象,包含傳入函數中的所有參數(這是其主要用途),除此之外,其還有一個callee的屬性,該屬性是一個指針,指向當前函數對象.
this引用的是函數據以執行的環境對象.在調用函數之前,this的值是不確定的,當在全局對象中調用函數時,this引用的是全局對象window,當把函數賦值給某對象時,this指的是此對象.
window.color = "red"; function sayColor(){ alert(color); } sayColor(); //red var o={color:"blue"}; o.sayColor = sayColor; o.sayColor();//blue函數的屬性和方法
屬性
length:函數希望接收的命名參數的個數.
prototype:這是一個非常耐人尋味的屬性,它保存著函數的實例方法,意即到通過函數實例化得到的對象可以訪問prototype中的方法.此屬性在自定義引用類型和實現繼承很有用處.
方法
apply call這兩個方法是函數的非繼承方法.用途都是設置函數體內this對象的值.
apply接收兩個參數,第一個是運行函數的作用域,通俗的說就是將這個參數作為this指向的值.第二個參數是數組作為執行函數的參數.
function sum(num1,num2){ return num1+num2; } function callSum(num1,num2){ return sum.apply(this,arguments); } alert(callSum(10,10)); //20
call接收的第一個參數也是運行函數的作用域,后面的參數也是傳遞給執行函數的參數,與apply不同的是,后面的參數并非數組,而是逐個列舉出來的.
function sum(sum1,sum2){ return sum1+sum2; } function callSum(num1,num2){ return sum.call(this,num1,num2); } alert(callSum(10,10)); //20構造函數
ECMAScript中的構造函數可以創建特定類型的對象.內置的構造函數(例如Array Object)會自動出現在執行環境中.構造函數的首字母應該以大寫字母開頭,從而區分非構造函數.
要創建新的實例,必須使用new操作符,穿件新的實例會經歷以下四個步驟:
創建一個新對象
將構造函數的作用域賦值給新對象(因此this指向這個新對象);
指向構造函數中的代碼.
返回新對象
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");
構造函數與普通函數的區別在于構造函數在實例化時加了new關鍵字.其它地方完全一樣.
重要提示 在通過構造函數實例化對象時,請勿把方法放在構造函數中,因為每個函數(在這里指方法方法)都是對象,每次實例化一個對象時這個對象中會保存每一構造函數中的方法,這是很影響性能的.解決辦法是把這些方法放在prototype屬性中.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85994.html
摘要:深入之繼承的多種方式和優缺點深入系列第十五篇,講解各種繼承方式和優缺點。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執行了。 JavaScript深入之繼承的多種方式和優缺點 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優缺點。 寫在前面 本文講解JavaScript各種繼承方式和優缺點。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:要理解立即執行函數,需要先理解一些函數的基本概念。函數表達式使用關鍵字聲明一個函數,但未給函數命名,最后將匿名函數賦予一個變量,叫函數表達式,這是最常見的函數表達式語法形式。 javascript和其他編程語言相比比較隨意,所以javascript代碼中充滿各種奇葩的寫法,有時霧里看花,當然,能理解各型各色的寫法也是對javascript語言特性更進一步的深入理解。 ( functio...
摘要:使用上一篇文章的例子來說明下自由變量進階期深入淺出圖解作用域鏈和閉包訪問外部的今天是今天是其中既不是參數,也不是局部變量,所以是自由變量。 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導) 本周正式開始前端進階的第二期,本周的主題是作用域閉包,今天是第7天。 本計劃一共28期,每期重點攻克一個面試重難點,如果你還不了解本進階計...
摘要:的翻譯文檔由的維護很多人說,阮老師已經有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:理解的函數基礎要搞好深入淺出原型使用原型模型,雖然這經常被當作缺點提及,但是只要善于運用,其實基于原型的繼承模型比傳統的類繼承還要強大。中文指南基本操作指南二繼續熟悉的幾對方法,包括,,。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 怎樣使用 this 因為本人屬于偽前端,因此文中只看懂了 8 成左右,希望能夠給大家帶來幫助....(據說是阿里的前端妹子寫的) this 的值到底...
摘要:理解作用域高級程序設計中有說到對象是在運行時基于函數的執行環境綁定的在全局函數中,等于,而當函數被作為某個對象調用時,等于那個對象。指向與匿名函數沒有關系如果函數獨立調用,那么該函數內部的,則指向。 理解this作用域 《javascript高級程序設計》中有說到: this對象是在運行時基于函數的執行環境綁定的:在全局函數中,this等于window,而當函數被作為某個對象調用時,t...
閱讀 2052·2021-11-15 11:39
閱讀 3236·2021-10-09 09:41
閱讀 1500·2019-08-30 14:20
閱讀 3269·2019-08-30 13:53
閱讀 3333·2019-08-29 16:32
閱讀 3389·2019-08-29 11:20
閱讀 3029·2019-08-26 13:53
閱讀 783·2019-08-26 12:18