JavaScript中Function詳解
關(guān)鍵字function用來定義函數(shù)。
//函數(shù)聲明式定義:
function funcname([arg1[,args[...,argn]]]){
statements
}
//函數(shù)表達(dá)式定義:
var funcname = function ([arg1[,args[...,argn]]]){
statements
};
注意,function語句里的花括號是必需的,即使函數(shù)體只包含一條語句。
在JavaScript中,函數(shù)是Function類的具體實例。而且都與其它引用類型一樣具有屬性和方法。
函數(shù)名實際上是指向函數(shù)對象的指針,函數(shù)可以作為參數(shù)參與到傳參和返回值中。
函數(shù)的對象特性
因為函數(shù)是Function的實例,而函數(shù)名僅僅是該實例的一個引用地址。因此可以作為參數(shù)和返回值參與到函數(shù)的傳參過程中。
function call_some_function(some_function, some_argument) {
return some_function(some_argument);
}
function add_10(num) {
return num + 10;
}
console.log(call_some_function(add_10,20)); //30
函數(shù)的內(nèi)部屬性
arguments | this
•arguments對象中保存著傳遞給函數(shù)的參數(shù)
•arguments.length返回傳入?yún)?shù)的個數(shù)
•Note: length屬性表示函數(shù)定義時候默認(rèn)接收的參數(shù)數(shù)量。arguments.length表示函數(shù)實際執(zhí)行時接收的參數(shù)數(shù)量。
function test_arguments() {
if (arguments.length == 2) {
console.log(arguments.length);
console.log(arguments);
} else {
console.log(arguments.length);
console.log(arguments);
arguments.callee(4, 5);
};
}(1, 2, 3)
/**
3
{ '0': 1, '1': 2, '2': 3 }
2
{ '0': 4, '1': 5 }
**/
•arguments.callee()主要用在遞歸函數(shù)中調(diào)用函數(shù)自身的情境中。js和別的語言不同在于函數(shù)名只是一個指針,可以隨時變化,函數(shù)中利用函數(shù)名來調(diào)用自身屬于高耦合,可能會出現(xiàn)問題,而arguments.callee()調(diào)用自身就會規(guī)避掉這個問題
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * factorial(num - 1);
};
}
function callee_f(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num - 1);
};
}
factorial(10); //運行正常
f = factorial;
factorial = null;
f(10); //error
callee_f(10); //運行正常
f = callee_f;
callee_f = null;
f(10); //運行正常
•this主要用來幫助函數(shù)引用函數(shù)所處作用域中的對象。
var color = 'red';
function syaColor() {
console.log(this.color);
}
syaColor(); //red
var o = new Object();
o.color = 'blue';
o.sayColor = sayColor;
o.sayColor(); //blue
call()和apply()
call()和apply()是每個函數(shù)都包含的自有方法。之前已經(jīng)提到了函數(shù)是定義的對象,那么調(diào)用函數(shù)時候,函數(shù)中的this是對當(dāng)前與下變量的調(diào)用。而如果想改變函數(shù)執(zhí)行所在域空間,則可以使用call()和apply()來實現(xiàn)。
color = 'red';
var o = {color: 'blue'};
function sayColor() {
console.log(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(o); //blue
app()和call()的作用是相同的,區(qū)別主要在于傳入?yún)?shù)的不同。
call(this,para1,prar2,prar3) 第一個參數(shù)是函數(shù)要執(zhí)行的作用域,后面的參數(shù)是函數(shù)的輸入?yún)?shù),有多少個依次寫多少個。
apply(this,[para1,para2,prara3])第一個參數(shù)也是函數(shù)要執(zhí)行的作用域,后面是一個Array的數(shù)組對象。
使用call()/apply()來擴充作用域最大的好處是對象和方法的解耦。
內(nèi)置對象
Global對象可以理解成最外層的對象,所有的對象,以及不屬于其它對象的屬性和方法都被包含在Global對象中。
* isNaN(x) 用來檢查參數(shù)x是否為數(shù)字。如果為數(shù)字返回false,否則返回true
* isFinite(x) 用來檢查參數(shù)x是否為無窮大/小,如果是無窮大/小,則返回true
* parseInt(x) 用來解析字符串并返回整數(shù)
* parseFloat(x) 用來解析字符串并返回浮點數(shù)
* encodeURI()和encodeURIComponent()會對字符串進(jìn)行特殊的UTF-8編碼,規(guī)避一些特殊字符來讓瀏覽器能夠讀懂。他倆的區(qū)別主要在于encodeURI()不會對本身屬于URI的特殊字符進(jìn)行編碼,而encodeURIComponent()會對其發(fā)現(xiàn)的所有非標(biāo)準(zhǔn)字符進(jìn)行編碼。
var uri = "http://www.wrox.com/illegal value.htm#start";
//http://www.wrox.com/illegal%20value.htm#start
console.log(encodeURI(uri))
//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
console.log(encodeURIComponent(uri))
•對應(yīng)的解碼函數(shù)為decodeURI()和decodeURIComponent()
•eval(script) 用來將script的內(nèi)容在解釋器中執(zhí)行并返回對應(yīng)的結(jié)果。非常強大!
Note:在瀏覽器中,windows對象封裝了Global對象,并承擔(dān)了很多額外的任務(wù)和功能。
Math對象為另一個內(nèi)置對象。為JavaScript提供了數(shù)學(xué)計算功能。
以上就是本文的全部內(nèi)容了,希望小伙伴們能夠喜歡,能夠?qū)Υ蠹矣兴鶐椭?/p>
- Javascript自執(zhí)行匿名函數(shù)(function() { })()的原理淺析
- JavaScript中Function函數(shù)與Object對象的關(guān)系
- JavaScript基礎(chǔ)篇(3)之Object、Function等引用類型
- js立即執(zhí)行函數(shù): (function ( ){})( ) 與 (function ( ){}( )) 有什么區(qū)別?
- JavaScript獲取function所有參數(shù)名的方法
- seajs加載jquery時提示$ is not a function該怎么解決
- javascript中$(function() {});寫與不寫有哪些區(qū)別
- javascript中Function類型詳解
- JavaScript Function函數(shù)類型介紹
- js入門之Function函數(shù)的使用方法【新手必看】
相關(guān)文章
微信小程序textarea層級過高(蓋住其他元素)問題的解決辦法
這篇文章主要給大家介紹了關(guān)于微信小程序textarea層級過高(蓋住其他元素)問題的解決辦法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
JSON.parse損壞大數(shù)字的原因解析及解決方案
從10多年前JSON在線編輯器的早期開始,用戶經(jīng)常反映編輯器有時會破壞他們JSON文檔中的大數(shù)字的問題,這篇文章主要介紹了為什么JSON.parse會損壞大數(shù)字,如何解決這個問題,需要的朋友可以參考下2022-10-10
javascript和jquery實現(xiàn)設(shè)置和移除文本框默認(rèn)值效果代碼
這篇文章主要介紹了javascript和jquery實現(xiàn)設(shè)置和移除文本框默認(rèn)值效果代碼,本文實現(xiàn)的是類似html5 placeholder(空白提示)一種效果,需要的朋友可以參考下2015-01-01
構(gòu)造函數(shù)+原型模式構(gòu)造js自定義對象(最通用)
這種方式是javascript中最通用的創(chuàng)建對象的方式,下面用示例為大家介紹下2014-05-05

