如何使JavaScript中的所有函数都可以访问变量
How do make variables acessible to all functions in JavaScript?
我很好奇在这个代码片段中我不理解什么。。。
为什么这样做?
function insert_number(number){
var output = document.getElementById('output');
output.value += number.value;
}
但这不管用吗?
var output = document.getElementById('output');
function insert_number(number){
output.value += number.value;
}
这与变量output
的定义方式有关吗?
此外,我如何在函数insert_number()
中写入output
变量,同时仍然使output
可用于脚本中的所有其他函数(即使这意味着必须将变量从函数中转义,或者专门将其作为参数发送给另一个函数)?
注意:我所有的代码都在一个外部的".js"文件中
截至目前,代码的完整上下文如下(我稍后将添加更多内容):
var output = document.getElementById('output');
function insert_number(number){
output.value += number.value;
}
function clear_output(){
output.value = "";
}
以下是一个在全局范围内只保留单个对象/命名空间的解决方案:
(function(global, d) {
var output = d.getElementById('output'),
myApi = {};
myApi.insert_number = function(number){
output.value += number.value;
};
//export your api to the global scope
global.myApi = myApi;
})(window, document);
现在您可以调用myApi.insert_number(5);
。您现在有一个可以访问output
变量的闭包,这样您就可以向API添加额外的功能,而不必每次都访问DOM。
提醒一下,像这样的JavaScript应该放在页面底部,就在关闭的</body>
上方
我建议在全球范围内观看这段视频:http://www.watchmecode.net/javascript-scope
实际上,只要中的DOM元素,它们都可以工作
document.getElementById('output')
在运行代码时存在。重要的区别在于,insert_number
函数可能在加载DOM之后运行,这与第二个示例中的裸输出分配不同。
此外,我将如何在函数中写入
output
变量insert_number()
,同时仍使输出在全球范围内可供所有人使用脚本中的其他函数?
优秀的JavaScript开发人员会尽量避免不必要的全局变量,但简单的答案是:
var output; // declared, but as yet undefined
window.onload = function () {
window.output = document.getElementById("output");
}
function insert_number(number) {
output.value += number.value;
}
这与全局变量无关。
您的head
中可能有该脚本。在那个阶段,DOM还没有完全构建,ID为output
的元素还不存在。因此document.getElementById('output')
将返回null
(示例)。
但是,如果您可能在DOM构建后的某个时间调用insert_number
,作为对某些用户交互的响应。在这种情况下,元素将存在。
最简单的解决方案是将代码放在关闭的body
标记之前(例如,注意不同的jsfiddle设置和/或检查源代码)。
我认为您的代码不工作的原因是因为在调用var output = document.getElementById('output');
时没有加载DOM
将下面的代码移到输出div所在的位置,它应该可以在
如果您声明一个变量,而不使用"var",则该变量始终变为全局。更多信息请点击此处:http://www.w3schools.com/js/js_variables.asp
- 任何一种简单的方法都可以将带有onload的元素作为目标
- 如何在Javascript中创建一个所有用户都可以访问的变量
- 响应式图片库,每个图片都可以通过锚链接访问
- 如何使整个列表项都可以点击
- JQuery.每个函数都不起作用
- 任何人都可以帮助我如何在客户端加载XML,该XML在服务器上,我需要对文件进行更改
- 我需要将这两个函数从javascript更改为JQuery,任何人都可以告诉我如何转换
- 编写JS原型时,所有函数都应该使用原型对象
- 如何使用javascript函数创建可以调用javascript函数的聚合物元素
- 每个函数和Includes函数都是't使用Javascript
- 任何人都可以解释JavaScript中的reduce函数吗?
- 设置同步/异步函数序列的正确方法,所有这些函数都可以停止表单提交和进一步处理
- 在 Javascript 中提升函数和变量时遇到问题,任何人都可以帮助我
- 需要挂接到javascript函数调用,无论如何都可以做到这一点
- 如何使JavaScript中的所有函数都可以访问变量
- 任何Sublime Text插件都可以用匿名函数自动包装生成的js
- JQuery的每个函数都可以用在隐藏的DOM对象上吗?
- 用一个所有对象都可以使用的函数扩充Object对象
- 任何人都可以解释一下另一个函数中的函数的这种行为
- 如何定义一个变量,我的对象中的所有函数都可以访问该变量