2016-01-30 14 views
3

有些東西我找不到答案或解釋。讓我們以例如下面的代碼:如何將未定義的變量轉變爲函數內的對象

function fn(x){ 
    x = {value: 10}; 
} 
var a; 
fn(a); 

alert(a.value); //a is undefined 

不應該a = {value: 10};因爲我們通過它通過該功能?

+1

*也有一些是我無法找到答案或解釋* - 在這裏你去:[JavaScript的:通過值或引用傳遞(http://snook.ca/檔案/ JavaScript的/ javascript_pass) –

回答

7

x在本地範圍內。您只傳遞而不是引用。所以,你可能需要收益並分配這樣的:

function fn(x){ 
    x = {value: 10}; 
    return x; 
} 
var a; 
a = fn(a); 

awesome article

當傳遞像一個字符串或數字基本類型的變量,該值在傳遞價值。這意味着在函數中對該變量的任何更改都與函數外部發生的任何變化完全分離。

function myfunction(x) 
{ 
    // x is equal to 4 
    x = 5; 
    // x is now equal to 5 
} 

var x = 4; 
alert(x); // x is equal to 4 
myfunction(x); 
alert(x); // x is still equal to 4 

中的對象傳遞,然而,其通過引用將其傳遞。在這種情況下,該對象的任何屬性都可以在該函數內訪問。

function myobject() 
{ 
    this.value = 5; 
} 
var o = new myobject(); 
alert(o.value); // o.value = 5 
function objectchanger(fnc) 
{ 
    fnc.value = 6; 
} 
objectchanger(o); 
alert(o.value); // o.value is now equal to 6