亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

js 關(guān)于function 的所有疑惑點(diǎn)

loonggg / 3450人閱讀

摘要:但是引用對象保存的是,指針地址,所以傳入的也是指針地址。詳細(xì)解釋下傳參過程調(diào)用的時(shí)候,會進(jìn)行參數(shù)的值傳遞。函數(shù)則是,如上。我們可以通過這樣就可以應(yīng)用下的所有方法了。也就是說,在沒有傳入?yún)?shù)的時(shí)候,通過可以讓我們的擁有其他的方法

function 值傳遞

解決:什么時(shí)候什么樣的參數(shù)傳遞,會修改外部參數(shù)。
1.參數(shù)傳入function的過程,是一個(gè)值復(fù)制的過程。但是引用對象(object array function)保存的是,指針地址,所以傳入的也是指針地址。這樣,內(nèi)存中就保持了兩個(gè)相同的地址,指向同一個(gè)對象。

詳細(xì)解釋下:function 傳參過程
function change(config){
  config.name = "changed" 
}

var obj = {name:"unchanged"}
change(obj);

調(diào)用function的時(shí)候,會進(jìn)行參數(shù)的值傳遞。
obj = 一個(gè)對象嗎?錯(cuò),是對象在堆里的內(nèi)存地址,
config = obj,是把對象的內(nèi)存地址復(fù)制給config。這樣config和obj指向同一個(gè)對象,config可以修改外部對象了
var obj1 = {
    value:"111"
};

var obj2 = {
      value:"222"
};

function changeStuff(obj){
      obj.value = "333";
      obj = obj2;
      return obj.value;
}

var foo = changeStuff(obj1);

console.log(foo);// "222" 參數(shù)obj指向了新的對象obj2
console.log(obj1.value);//333

理解了這個(gè),就理解了function里的傳值了
參考文獻(xiàn):
解釋的超級清楚: http://fehacker.com/2014/12/19/call-by-sharing/

apply&call:修改function執(zhí)行時(shí),this指針對象

首先貼上api:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply#apply_and_built-in_functions
mdn官方文檔

fn.apply(thisObj,[argumentsArr]),apply的第二個(gè)參數(shù)是數(shù)組(或者類數(shù)組)。apply首先會修改function里的this指針,接著把[argumentsArr]數(shù)組里的參數(shù)一個(gè)一個(gè) push fn。
fn.call(thisObj,name,age),call函數(shù)則是,如上。

當(dāng)我們擁有可以改變this指針的fn時(shí)候,我們可以做什么呢?

利用apply push arguments的特點(diǎn),可以解決目標(biāo)函數(shù)只接受傳遞n個(gè)參數(shù),而不是數(shù)組的時(shí)候

尋找數(shù)組最大值
var number = [2,34,43,5,6,6]
Math.max(2,34,43,5,6,6)//因?yàn)閙ax方法,不接受數(shù)組參數(shù)

Math.max.apply(null,number)//

當(dāng)一個(gè)obj沒有某個(gè)方法,但是其他對象實(shí)現(xiàn)了,就可以借助call使用

用的比較多的,通過document.getElementsByTagName選擇的dom 節(jié)點(diǎn)是一種類似array的array。
它不能應(yīng)用Array下的push,pop等方法。我們可以通過:
var domNodes =  Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就可以應(yīng)用Array下的所有方法了。

也就是說,在沒有傳入?yún)?shù)的時(shí)候,通過call可以讓我們的obj擁有其他obj的方法

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/78305.html

相關(guān)文章

  • 關(guān)于javascript中類型判斷那些疑惑

    摘要:對于復(fù)雜類型它的每個(gè)實(shí)例都有屬性。當(dāng)檢測實(shí)例時(shí)優(yōu)于因?yàn)槟軝z測這段代碼是從的。補(bǔ)充以下結(jié)果,發(fā)現(xiàn)第三種方法也能正確判斷出。我們知道結(jié)果是那如何判斷兩個(gè)變量呢比較兩個(gè)變量,使用的即可。 Javascript中數(shù)據(jù)類型分為兩種: 簡單數(shù)據(jù)類型:Undefined, NULL, Boolean, Number, String 復(fù)雜數(shù)據(jù)類型:Object 接下來我們就來看看怎么做數(shù)據(jù)類型判別...

    李增田 評論0 收藏0
  • DOM疑惑點(diǎn)整理(二)內(nèi)聯(lián)、嵌入、外聯(lián)樣式訪問

    摘要:內(nèi)聯(lián)樣式外聯(lián)樣式樣式屬性,寫在外部文件,通過鏈接導(dǎo)入。內(nèi)聯(lián)樣式注意點(diǎn)樣式的應(yīng)用,采取就近原則,因此一般情況優(yōu)先級是內(nèi)聯(lián)樣式嵌入樣式外聯(lián)樣式。中有新的方式去查看完整的屬性某元素內(nèi)聯(lián)外聯(lián)嵌入樣式合起來計(jì)算后的屬性。 訪問的style屬性為空? 有時(shí)候,直接通過某元素的style屬性去查看相關(guān)信息時(shí),會發(fā)現(xiàn)查看到的是空的屬性。原因很簡單,style屬性只能訪問內(nèi)聯(lián)樣式,而你把css寫在了外部...

    Lucky_Boy 評論0 收藏0
  • 關(guān)于VUE響應(yīng)式數(shù)據(jù)最佳解釋

    摘要:遍歷執(zhí)行其中存儲的所有的匿名函數(shù)。如果我們使用一個(gè)類來管理相關(guān)依賴,這很接近的表現(xiàn)方式代碼看起來就像下面這樣你會發(fā)現(xiàn)現(xiàn)在匿名函數(shù)被儲存在而不是原來的。 許多前端框架(如Angular,React,Vue)都有自己的響應(yīng)式引擎。通過理解如何響應(yīng),提議提升你的開發(fā)能力并能夠更高效地使用JS框架。本文中構(gòu)建的響應(yīng)邏輯與Vue的源碼是一毛一樣的! 響應(yīng)系統(tǒng) 初見時(shí),你會驚訝與Vue的響應(yīng)系統(tǒng)。...

    endiat 評論0 收藏0
  • 探秘JS異步單線程

    摘要:對于通常的特別是那些具備并行計(jì)算多線程背景知識的來講,的異步處理著實(shí)稱得上詭異。而這個(gè)詭異從結(jié)果上講,是由的單線程這個(gè)特性所導(dǎo)致的。的特性之一是單線程,也即是從頭到尾,都在同一根線程下運(yùn)行。而這兩者的不同,便在于單線程和多線程上。 對于通常的developer(特別是那些具備并行計(jì)算/多線程背景知識的developer)來講,js的異步處理著實(shí)稱得上詭異。而這個(gè)詭異從結(jié)果上講,是由js...

    cooxer 評論0 收藏0

發(fā)表評論

0條評論

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