Javascript全局变量不能正常工作?
我的jQuery代码:
$(document).ready(function() { chrome.extension.sendRequest({get: "height"}, function(response) { height = response.value; }); $("#id").css("height", height+"px"); });
您不必担心chrome.extension.sendRequest()
,基本上它与后台页面通信以从localStorage获取“height”的值并将值存储在全局变量height
。
问题在于$("#id")
未被赋予高度值。 但是,如果我要修改它,现在它是:
$(document).click(function() { $("#id").css("height", height+"px"); });
有用。 知道为什么吗?
原因是当您将分配推迟到文档单击时,这意味着请求有时间完成,并设置高度值。
在第一个示例中,高度在分配时没有值。 原因是传递给sendRequest
的函数体不会立即执行,但会在请求完成之前保存。 之后,调用该函数。 但在此之前,javascript将继续执行你的$("#id")...
声明。 要确保在有值之前没有为其分配值,请将其更改为以下值:
$(document).ready(function() { chrome.extension.sendRequest({get: "height"}, function(response) { height = response.value; $("#id").css("height", height+"px"); }); });
现在,如果传递给sendRequest
的回调函数是在无法执行该代码的上下文中执行的,那么浏览器扩展可能就是这种情况,您可能需要传递对该对象的引用:
$(document).ready(function() { var myObj = $("#id"); chrome.extension.sendRequest({get: "height"}, function(response) { height = response.value; myObj.css("height", height+"px"); }); });
但如果有效,我会选择第一个版本。
当您应用此项时,请调查是否仍需要保持height
变量全局…