js 關於function 的全部疑惑點

function 值傳遞

解決:何時什麼樣的參數傳遞,會修改外部參數。
1.參數傳入function的過程,是一個值複製的過程。可是引用對象(object array function)保存的是,指針地址,因此傳入的也是指針地址。這樣,內存中就保持了兩個相同的地址,指向同一個對象。api

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

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

調用function的時候,會進行參數的值傳遞。
obj = 一個對象嗎?錯,是對象在堆裏的內存地址,
config = obj,是把對象的內存地址複製給config。這樣config和obj指向同一個對象,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' 參數obj指向了新的對象obj2
console.log(obj1.value);//333

理解了這個,就理解了function裏的傳值了
參考文獻:
解釋的超級清楚: http://fehacker.com/2014/12/19/call-by-sharing/數組

apply&call:修改function執行時,this指針對象

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

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

當咱們擁有能夠改變this指針的fn時候,咱們能夠作什麼呢?函數

  • 利用apply push arguments的特色,能夠解決目標函數只接受傳遞n個參數,而不是數組的時候ui

尋找數組最大值
var number = [2,34,43,5,6,6]
Math.max(2,34,43,5,6,6)//由於max方法,不接受數組參數

Math.max.apply(null,number)//
  • 當一個obj沒有某個方法,可是其餘對象實現了,就能夠藉助call使用this

用的比較多的,經過document.getElementsByTagName選擇的dom 節點是一種相似array的array。
它不能應用Array下的push,pop等方法。咱們能夠經過:
var domNodes =  Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就能夠應用Array下的全部方法了。

也就是說,在沒有傳入參數的時候,經過call能夠讓咱們的obj擁有其餘obj的方法
相關文章
相關標籤/搜索