2016-11-09 156 views
-1

如何通過js訪問內部函數。換句話說,「函數與返回」和「函數沒有返回」有什麼區別?「函數返回」和「函數無返回」之間的區別

與回報

function makeAdder(x) { 

    function add(y) { 
     console.log(x,y) 
     return x+y; 
    }; 

    return add; 

} 

makeAdder(3)(4) // 7 

沒有

function makeAdder(x) { 

    function add(y) { 
     console.log(x,y) 
     return x+y; 
    }; 
} 

makeAdder(3)(4) // error 

如果我想訪問add()makeAdder(3).add(4),如何編寫代碼?

回答

1

當一個函數沒有return聲明,它含蓄地返回undefined。如果你想打電話.add像你所說,你的函數應該以add屬性返回一個對象:

function makeAdder(x) { 
 
    return { 
 
     add(y) { 
 
     return x+y; 
 
     } 
 
    }; 
 
} 
 

 
console.log(makeAdder(3).add(4)) // 7

或者,你也可以使用ES6 classes一個更傳統的面向對象的方法:

class Adder { 
 
    constructor(x) { 
 
    this.x = x 
 
    } 
 
    
 
    add(y) { 
 
    return this.x + y 
 
    } 
 
} 
 

 
console.log(new Adder(3).add(5))

1

makeAdder在這種情況下應該返回object

當調用makeAdder(3)時,它返回object,其中包含鍵爲add,該鍵包含一個函數。

function makeAdder(x) { 
 
    function add(y) { 
 
    console.log(x, y) 
 
    return x + y; 
 
    }; 
 
    return { 
 
    add: add 
 
    }; 
 
} 
 

 
console.log(makeAdder(3).add(4));