Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery javascript加载变量作用域_Javascript_Jquery_Scope - Fatal编程技术网

jquery javascript加载变量作用域

jquery javascript加载变量作用域,javascript,jquery,scope,Javascript,Jquery,Scope,我试图从外部js文件中获取一些配置,因此似乎我需要在$(document).ready(function(){….)中进行配置。保存配置对象的变量需要对所有函数进行全局访问。没有任何理由让所有函数都位于document ready函数中 从我所读到的内容来看,下面的内容应该可以使app.config在全球范围内可用,但事实并非如此 window.app = {}; $(document).ready(function(){ app.config = window[$('body').a

我试图从外部js文件中获取一些配置,因此似乎我需要在
$(document).ready(function(){….
)中进行配置。保存配置对象的变量需要对所有函数进行全局访问。没有任何理由让所有函数都位于document ready函数中

从我所读到的内容来看,下面的内容应该可以使
app.config
在全球范围内可用,但事实并非如此

window.app = {};

$(document).ready(function(){
    app.config = window[$('body').attr('data-app')];
});

console.log(app.config);

这会产生错误
app.config未定义。
。我假设该变量在文档就绪中可以全局访问,但我需要它在任何地方都可以全局访问。我将如何做到这一点?如果可能,请解释文档就绪中和文档就绪外的范围!

在您为其分配一个值。在触发
ready
事件之前,您不会为其赋值,但您会立即查看该值(此时它仍然是
未定义的

作为比较:

window.app = {};

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

console.log(app.config);
在单击按钮之前,不会将
config
设置为
1


同样的原则。

实际的执行顺序如下:

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

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

window.app = {};

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

console.log(app.config);
$(document).ready(函数(){});
将在

document.onreadystatechange= function () {  
  if (document.readyState == "complete") {

  }
}.//This is one ways of implementing $(document).ready();

在您的例子中,
console.log()
将在
readyState
计算完成之前被调用。

显示这样的执行顺序很有帮助,并解释了我为什么会遇到问题,而不是如何解决问题。脚本中有很多函数将依赖配置数据,但仅仅丢弃文档rea中的所有内容似乎是错误的dy函数。有更好的解决方案吗?@Ally查看我的更新回答如何更好地完成OK,因此任何需要配置数据的函数都必须在
文档中调用。ready
函数才能使用变量。但是如果
文档.ready
函数之外的另一个函数调用需要配置数据的函数?那么变量是否可用?可能不可用。目前我将所有函数放在
document.ready
中,这样它就可以工作了,但在某种程度上它似乎不是正确的方法。@Ally不应该有任何这样的函数,它在配置初始化之前调用依赖配置的函数。您应该切换到这种类型根据您在“传统”编程中所习惯的方式进行思考。如果日志是从document ready函数中输出的,则该值定义为ok并起作用