Tôi đang cố gắng sử dụng windows.load mà không có biến toàn cầu.window.onload không có biến toàn cầu
Mã HTML:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Test</title>
<link rel="stylesheet" href="main.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form>
Name: <input type="text" id="txt1"><br><br>
<input type="button" value="Check Input" id="b1">
</form>
</body>
</html>
Các mã JavaScript biến toàn cầu:
/*jslint browser: true*/
var myButton;
window.onload = function() {
"use strict";
myButton = document.getElementById("b1");
myButton.addEventListener("click",alertMM);
};
function alertMM() {
"use strict";
window.console.log(myButton.value);
}
Và cuối cùng là KHÔNG LÀM VIỆC không có mã biến toàn cầu:
/*jslint browser: true*/
var myNS = {
myButton: undefined,
//
setUp: function() {
"use strict";
myNS.myButton = document.getElementById("b1");
myNS.myButton.addEventListener("click", alertMM);
}
};
window.onload = myNS.setUp();
function alertMM() {
"use strict";
window.console.log(myNS.myButton.value);
}
Lý do mà tôi muốn ngừng sử dụng biến toàn cục là tôi sợ nó sẽ mâu thuẫn với mã tương lai.
Cảm ơn trước
Adrian
BTW, bạn có thể sử dụng 'này .myButton = 'như là một thay thế cho' myNS.myButton = '. Có lẽ là vấn đề sở thích cá nhân trong trường hợp này ... –
bạn có thể sử dụng mẫu [IIFE] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/) và bọc eveyrthing trong một chức năng tự thực hiện, thiết lập phạm vi bên trong và sẽ không để cho các biến bị rò rỉ đến phạm vi toàn cầu – yoavmatchulsky
hoặc bạn có thể định nghĩa 'alertMM()' bên trong hàm onload của bạn và sử dụng cùng một đối tượng 'myButton' – yoavmatchulsky