Jquery javascript加载变量作用域

jquery javascript on load variable scope

本文关键字:作用域 变量 加载 javascript Jquery      更新时间:2023-09-26

我试图从外部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。我假设该变量可以在文档准备中全局访问,但我需要它在任何地方都全局可用。我该怎么做呢?如果可能的话,在文件准备的范围内和外的解释将不胜感激!

在为其赋值之前,它是不可用的。在ready事件触发之前不给它赋值,而是立即查看该值(此时它仍然是undefined)。

比较:

window.app = {};
$('button').on('click', function(){
    app.config = 1
});
console.log(app.config);

这不会设置config1,直到一个按钮被点击。

相同原则。

$(document).ready(function( ){});将被解雇

document.onreadystatechange= function () {  
  if (document.readyState == "complete") {
  }
}.//This is one ways of implementing $(document).ready();

在您的情况下,console.log()readyState评估完成之前被调用。

实际的执行顺序如下:

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包含任何内容。

在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)
}

全局可用。$('body').attr('data-app')的值可能未定义。例如:

window.app = {};
$(document).ready(function(){
    app.config = window['Attr'];
});
console.log(app.config);