javascript
javascript基础:函数参数与闭包问题
今天在寫東西的時候,對函數(shù)參數(shù)的概念有些模糊,查閱相關(guān)資料后,在博客上記點筆記,方便日后復(fù)習(xí)。
首先,在js中函數(shù)參數(shù)并沒有強語言中那么要求嚴(yán)格,他不介意傳遞進(jìn)來多少個參數(shù),也不在乎傳進(jìn)來的參數(shù)是什么數(shù)據(jù)類型,甚至可以不傳參數(shù)。原因是:ECMAScript中的參數(shù)在內(nèi)部都是用一個數(shù)組來表示的
函數(shù)的顯式參數(shù)與隱式參數(shù)
- 函數(shù)的顯式參數(shù)是在函數(shù)定義時列出的,比如:
function hello(arg1,arg2){
//函數(shù)體
}?
此時的arg1,arg2就是函數(shù)的顯式參數(shù)
- 函數(shù)的隱式參數(shù)在函數(shù)調(diào)用時傳遞給函數(shù)真正的值
Es6中如果函數(shù)在調(diào)用時,未提供隱式參數(shù),參數(shù)會默認(rèn)設(shè)置為:undefined
參數(shù)規(guī)則:
其實前面已經(jīng)談到了,這里在列出來:
- js函數(shù)定義顯式參數(shù)時沒有進(jìn)行類型檢測
- js函數(shù)對隱式參數(shù)沒有進(jìn)行類型檢測
- js函數(shù)對隱式參數(shù)的個數(shù)沒有進(jìn)行檢測
閉包:
有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的常見方式,是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù),比如:
function makeName() {var name = "Mozilla"; // name 是一個被 init 創(chuàng)建的局部變量function displayName() { // displayName() 是內(nèi)部函數(shù),一個閉包alert(name); // 使用了父函數(shù)中聲明的變量}displayName(); } makeName();//Mozilla?上述代碼就是在makeName內(nèi)部創(chuàng)建了一個displayName函數(shù),而displayName可以調(diào)用父級函數(shù)的參數(shù).
閉包用途:
- 讀取函數(shù)內(nèi)部的變量
- 讓這些變量始終保存在內(nèi)存中
注意點:
-在退出函數(shù)之前,將不適用的局部變量全部刪除,避免內(nèi)存消耗
-閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值,把父函數(shù)當(dāng)作對象使用,把閉包當(dāng)作它的公用方法,把內(nèi)部變量當(dāng)作的它私有屬性,不要隨便改變父函數(shù)內(nèi)部變量的值
兩個高程上的例子,理解閉包:
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); //The Window其中object.getNameFunc()本身是來自object對象的方法,其返回值時一個函數(shù)
而object.getNameFunc()()就是前者返回的函數(shù),它本身的返回值時this.name
轉(zhuǎn)載于:https://www.cnblogs.com/yuan233/p/10289586.html
總結(jié)
以上是生活随笔為你收集整理的javascript基础:函数参数与闭包问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何获取字符串中某个具体的数值--通过j
- 下一篇: @ExceptionHandler