关于加载变量范围的jquery javascript

时间:2015-09-27 18:14:47

标签: javascript jquery scope

我正在尝试从外部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。我假设变量可以在文档中全局访问,但我需要它在全球范围内可用。我该怎么做?如果可能的话,我们将非常感谢文件内外的解释!

4 个答案:

答案 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);