2017-11-04 55 views
2

我无法访问函数定义中的字段(变量)。我的问题是与此代码:javascript函数中的访问字段

<script> 
    function test(){ var book= [];} 
    var arrs = test(); 
    alert(arrs.book); 
</script> 

它给了我'未定义',为什么?我希望它是一个空值。有没有什么办法可以在arrs上访问这个book数组变量?

回答

2

arrs未定义,因为test()不返回任何内容。所有的函数都是在局部声明一个变量,然后结束,所以局部变量不在范围之内,也没有任何反应。

基础上使用,它看起来像你希望你的函数可能返回一个对象?:

function test() { 
    return { book: [] }; 
} 

或者这个功能本身应该构造一个对象,你的意思是用new叫它:

function test() { 
    this.book = []; 
} 
var arrs = new test(); 
1

就像Carcigenicate说的,你错过了test()中的return语句。

function test(){ 
    var book= []; 
    // missing return... 
    return book; 
} 
var arrs = test(); 
alert(arrs); 

现在就试试。

1

// old way 
 
function Test1() { 
 
    this.books = ['t1'] 
 
} 
 

 
var t1 = new Test1() 
 

 
alert(t1.books) 
 

 

 
//es6 class 
 
class T2 { 
 
    constructor() { 
 
    this.books = ['t2'] 
 
    } 
 
} 
 

 
var t2 = new T2() 
 
alert(t2.books) 
 

 
// plain object 
 
var t3 = { 
 
    books: ['t3'] 
 
} 
 
alert(t3.books) 
 

 
// static field 
 
function T4() {} 
 
T4.prototype.books = [] 
 

 
var t4a = new T4(), 
 
    t4b = new T4() 
 
t4a.books.push('t4') 
 
alert(t4b.books)