我正在尝试从外部js文件中获取一些配置,因此我似乎需要在$(document).ready(function(){....
内执行此操作。保存配置对象的变量需要全局访问所有函数。所有函数都没有任何理由在文档就绪函数中。
根据我的阅读,以下内容应使app.config
全局可用,但事实并非如此!
window.app = {};
$(document).ready(function(){
app.config = window[$('body').attr('data-app')];
});
console.log(app.config);
这会产生错误app.config is undefined
。我假设变量可以在文档中全局访问,但我需要它在全球范围内可用。我该怎么做?如果可能的话,我们将非常感谢文件内外的解释!
答案 0 :(得分:0)
在为其指定值之前,它不可用。在ready
事件触发之前,您不会为其分配值,但您会立即查看该值(此时它仍为undefined
)。
进行比较:
window.app = {};
$('button').on('click', function(){
app.config = 1
});
console.log(app.config);
在点击按钮之前,这不会将config
设置为1
。
同样的原则。
答案 1 :(得分:0)
实际执行顺序如下:
1. app = {}
2. create listener
3. console.log app.conig
4. document is ready
5. app.config is initalized
您过早地致电console.log(app.config)
,app.config
包含任何内容。
在初始化之后使用配置的更好方法是以下代码:
$(document).ready(function(){
app.config = window[$('body').attr('data-app')]
# you should use config only after it's initialized
useConfig()
# call other functions here too
})
function useConfig() {
console.log(app.config)
}
答案 2 :(得分:0)
$(document).ready(function( ){});
将在
document.onreadystatechange= function () {
if (document.readyState == "complete") {
}
}.//This is one ways of implementing $(document).ready();
在您的情况下,在console.log()
评估完成之前,您的readyState
已被调用。
答案 3 :(得分:-1)
它在全球范围内可用。 $(' body')。attr(' data-app')的值可能是未定义的。 试试例如:
window.app = {};
$(document).ready(function(){
app.config = window['Attr'];
});
console.log(app.config);