Javascript:onload函数中声明的变量连接到哪里?
在运行函数的代码中,document.ready:Javascript:onload函数中声明的变量连接到哪里?,javascript,knockout.js,Javascript,Knockout.js,在运行函数的代码中,document.ready: $(function() { var vm = new ViewModel(); ko.applyBindings(vm); }); 在层次结构中的窗口下的哪里可以找到变量vm?哪里都找不到:您在函数中声明了(使用了var)它,因此它是一个局部范围的变量 如果希望它在窗口下可用,则使用window.vm而不是var-vm无处可用:您在函数中声明(使用了var)它,因此它是一个局部范围的变量 如果您希望它在窗口下可用,请使用wi
$(function() {
var vm = new ViewModel();
ko.applyBindings(vm);
});
在层次结构中的窗口下的哪里可以找到变量vm?哪里都找不到:您在函数中声明了(使用了var
)它,因此它是一个局部范围的变量
如果希望它在窗口下可用,则使用window.vm
而不是var-vm无处可用:您在函数中声明(使用了var
)它,因此它是一个局部范围的变量
如果您希望它在窗口下可用,请使用window.vm
而不是var-vm
tl;dr:您无法从窗口访问它,除非您将它放在那里
在函数内声明变量时,它是作用于函数的局部变量,而不是全局变量,因此在窗口中不可用。您需要将变量设置为window
的属性
示例:
$(function() {
var vm = new ViewModel();
ko.applyBindings(vm);
window.vm = vm;
});
tl;dr:您无法从窗口访问它,除非您将它放在那里
在函数内声明变量时,它是作用于函数的局部变量,而不是全局变量,因此在窗口中不可用。您需要将变量设置为window
的属性
示例:
$(function() {
var vm = new ViewModel();
ko.applyBindings(vm);
window.vm = vm;
});
根据定义,变量vm
在窗口
对象中不可用。这是因为,在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(您正在执行的操作)中执行所有代码,或者使用回调函数。根据定义,变量vm
在窗口中不可用。这是因为,在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(您正在执行的操作)中执行所有代码或使用回调函数。顺便说一句,您的回调不是激发的onload
,而是开启的。将其声明为全局变量,然后它将作为全局对象(浏览器中的窗口)的属性提供。顺便说一句,您的回调不是激发的onload
,而是启用的。将其声明为全局变量,然后它将作为全局对象(浏览器中的窗口)的属性可用。感谢您的简单解释。感谢您的简单解释。