2014-03-12 71 views
0

我想根据变量名称在我的主div中设置内容。例如,如果我运行:changeMain(nearbyCows)我想看到'tehe',而不是它看起来窗口[page]是未定义的。任何想法为什么?使用窗口[]访问变量内容

function changeMain(page) { 
    var nearbyCows = "<a>tehe</a>"; 
    var nearbyChickens = "<b>lol</b>"; 
    var search = "<i>meh</i>"; 

    $("main").html(window[page]); 
} 
+0

'nearbyCows'是在此函数的局部变量。它不在调用者的范围内,除非它有自己的同名变量。 – Barmar

+0

您只能使用'window [name]'来访问_global_变量,而不是局部变量。 – Barmar

+0

@ A.Wolff页面的值可以是三个附近的C,附近的Chickenso或搜索的其中之一(否则它将无法设置html) – jskidd3

回答

0

var nearbyCows没有在全球范围内定义,但作为本地变量,然后使用:nearbyCows = "<a>tehe</a>";不使用指令var

1

您正在函数的范围内创建这些变量。 window的属性是指全局范围。如果您想使用在全球范围内这样的,那么你需要将你的变量声明出来的功能:

var nearbyCows = '<a>tehe</a>'; 
var nearbyChickens = '<b>lol</b>'; 
var search = "<i>meh</i>"; 
function changeMain(page) { 
    $("main").html(window[page]); 
} 

但是,那么你基本上只是使用window作为查找哈希值,这将是更好,更清洁地保持自己的目光,而不是选择全球化。

例如:

var MainChanger = { 
    nearbyCows: '<a>tehe</a>', 
    nearbyChickens: '<b>lol</b>', 
    search: "<i>meh</i>", 
    change: function(page) { 
     $('#main').html(this[page]); 
    } 
}; 

MainChanger.change('nearbyCows'); 
0

使用的对象,而不是独立变量:

function changeMain(page) { 
    var items = { nearbyCows: "<a>tehe</a>", 
        nearbyChickens: "<b>lol</b>", 
        search: "<i>meh</i>" 
    }; 
    $("#main").html(items[page]); 
} 

然后,你可以这样调用:

changeMain('nearbyCows'); 
0

你必须知道,有倍数类型的变量。

你有全局变量是分配窗口(不是一个好的做法)。您可以这样声明它:

window.varName = ...; 
window['varName'] = ...; 
varName = ...; 

有变量的作用域,那就是声明变量通常的方式:

var varName = ...; 

这些变量是由内部范围访问藏汉而不是由外部范围访问。

还有对象属性。您创建一个对象,并指定值:

var obj = {}; 
obj.varName = ...; 
obj['varName'] = ...; 

如果你能看到,也没有办法,你可以用动态字符串访问范围的变量,你需要的对象或全局变量。 :

function changeMain(page) { 
    //Global variable, not recommended 
    window.nearbyCows = "<a>tehe</a>"; 
    window.nearbyChickens = "<b>lol</b>"; 
    window.search = "<i>meh</i>"; 

    $("main").html(window[page]); 
} 

或:

var obj = {} //Declare outside if you want to access it outside the function 
function changeMain(page) { 
    // var obj = {}; //or inside if you want it to be a private variable 
    //Object properties, recommended 
    obj.nearbyCows = "<a>tehe</a>"; 
    obj.nearbyChickens = "<b>lol</b>"; 
    obj.search = "<i>meh</i>"; 

    /*Alternative declaration, faster to process : 
    obj = { 
     nearbyCows : "<a>tehe</a>", 
     nearbyChickens : "<b>lol</b>", 
     search : "<i>meh</i>" 
    }*/ 

    $("main").html(obj[page]); 
}