本问题已经有最佳答案,请猛点这里访问。
我有以下HTML代码。我创建了一个客户对象。(custforatm.js中的constractor):
var customer = new CustomersATM("300321758","1234","Eric");
Add One to Customer ID
函数changeid()位于diffrent js文件(atm.js)中。我想点击这个按钮将添加发送变量"customer"到changeid功能。有可能吗?(我知道我可以将此方法移动到HTML文件中。但我不想。
谢谢!!
atm.js是什么样子的?
你的意思是把放在标签上吗?
在JS中,每个变量都是全局的,除非它在函数范围内。
在您的示例中,客户是一个全局变量。您应该能够执行以下操作:
Add One to Customer ID
谢谢!如果我改变了功能中的"客户"。(将1添加到ID)它也将在此处更改?或者只在函数changeid范围内。谢谢!!
在每个JS文件中,customer变量在任何地方都是全局变量。
客户是一个对象,因此它通过引用传递给changeid函数。这意味着您在客户身上更改的任何属性都将在您使用该变量的任何地方更改。
好的,太好了!谢谢大家!!
@用户2970484我不推荐这个答案。请阅读这些结果中的一些google.com/search?Q=why+is+inline+js+bad%3f并查看我的答案以遵循最佳实践。
在全局范围(又称"窗口")内,变量是全局的。
看看这个:
//this is global because it is in the global scope (the window)
var foo = 'stuff';
//because it is global (window) you can also access it like this:
console.log(window.foo); //'stuff'
现在您可以在任何地方访问foo。值得注意的是,globals并不是最佳实践——所以请查看面向对象编程(坚实的原则)。
如果您在另一个范围内(如函数),并且不使用var关键字创建变量,那么该变量将是全局的:
function someFunction() {
someVariable = 'stuff'; //this created a global variable! (or references an existing one)
//you could also assign it to window:
window.someVariable = 'stuff';
//both are the same thing!
}
内联JS(HTML中的onclick)不是一个好的实践。相反,您可以遵循良好的实践并使用javascript注册Click事件:
//get reference to button
var myBtn = document.getElementById('myBtn');
//add click function
myBtn.addEventListener('click', function(event) {
myFunction();
});
function myFunction() {
console.log(foo); //'stuff'
}
以下是所有这些的演示:http://jsbin.com/omubecaw/1/edit
请注意,在将元素引用加载到DOM之后,需要获取它们。最好的做法是将脚本放在身体的末尾,而不是头部,如下所示: