Javascript:在onload函数中声明的变量在哪里被附加?

时间:2014-08-20 23:24:58

标签: javascript knockout.js

document.ready

运行功能的代码中
$(function() {
    var vm = new ViewModel();
    ko.applyBindings(vm);
});

我在哪里可以在层次结构中的窗口下找到变量 vm

3 个答案:

答案 0 :(得分:3)

tl; dr:您无法从window访问它,除非您将其放在那里。

在函数内部声明变量时,它是作用于函数的局部变量,而不是全局变量,因此在window对象中不可用。您需要将变量设置为window的属性。

示例:

$(function() {
    var vm = new ViewModel();
    ko.applyBindings(vm);
    window.vm = vm;
});

答案 1 :(得分:2)

根据定义,变量vm将不会在您的window对象中提供。这是因为,在Javascript中,一个新函数(正如您所做的那样)创建了一个新范围。基本上,您的vm变量是一个私有变量。

如果你想使这个功能可用,你有两个选项(贝司卡利相同,但看起来有点不同):

1 - 您可以在函数之外声明变量

var vm;
$(function() {
    vm = new ViewModel();
    ko.applyBindings(vm);
});

2 - 您可以将其附加到窗口对象

$(function() {
  window.vm = new ViewModel();
  ko.applyBindings(vm); // vm refers to the vm variable in your window object
});

最好不要以任何方式将变量附加到窗口对象。你可能想找到另一种方法去做你想做的事情。有可能在document.ready(你在做什么)或使用回调函数中执行你的所有代码。

答案 2 :(得分:1)

无处:您在函数内声明(使用var)它是一个本地范围的变量。

如果您想在window下使用它,请使用window.vm代替var vm