Ton*_*ony 10 javascript global-variables
我需要在哪里放置一段JavaScript代码来初始化一个必须对页面执行的所有代码都可见的变量?(例如,元素上的事件处理程序将需要访问此变量).
med*_*iev 26
没有全局变量的唯一方法是var
在函数范围内使用关键字.其他任何东西都是全局变量.
(function() {
var local = 5;
})();
Run Code Online (Sandbox Code Playgroud)
如果函数是文字或函数定义并不重要,它必须是某种类型的函数.
全局变量示例:
1:
var global = 5;
Run Code Online (Sandbox Code Playgroud)
以上不在功能范围内,因此即使使用var
也是全局的.
2.
(function() {
global = 5;
})();
Run Code Online (Sandbox Code Playgroud)
在上面,没有var
使用,所以它成为隐含的全球.
3.
function foo(){}
Run Code Online (Sandbox Code Playgroud)
foo
未在另一个函数内部定义或分配给对象键,因此可以全局访问.
4.
(function() {
var local = global = 5;
})();
Run Code Online (Sandbox Code Playgroud)
使用多个赋值时var
,只有第一个变量变为局部变量...因此global
是全局变量并等于5.
5.
window.foo = 5;
Run Code Online (Sandbox Code Playgroud)
前缀window.
是在浏览器上下文中定义全局变量的显式方法.
6.
this.x = 5;
Run Code Online (Sandbox Code Playgroud)
默认情况下,在浏览器中,this
指向DOMWindow,除非您在附加到不是的对象的方法中window
.它与#5相同.请注意,如果使用XMLHttpRequest之类的方法,则上下文属于窗口.
7.
with ( window ) { name = 'john'; }
Run Code Online (Sandbox Code Playgroud)
如果使用该with
语句并且不引用已具有属性的对象,则定义全局变量.一般情况下,最好避免使用with
关键字.
结论:
就个人而言,我会将我的代码保存在匿名函数范围内,并且只在需要时显式声明全局变量.
(function() {
var governor = 'Schwarzenegger',
state = 'California';
window.president = 'Obama';
})();
Run Code Online (Sandbox Code Playgroud)
在上面,我定义governor
和state
变量,它们是我的函数的本地.我想明确定义president
为全局变量.这样,我不会混淆我定义为全局变量的变量,因为我明确地用它们作为前缀window.
.
Sup*_*uck 12
您可以使用任何函数或函数执行此操作,而无需使用'var'关键字.在任何其他脚本(可能是页面顶部)之前分配它,以便脚本可以读取值.
您也可以将它放在一个包含的JS文件中,但是将它放在页面上通常更有用,因为您可以轻松地查看全局值,并且可以通过服务器端代码为每个页面修改它们.同时尝试防止在正文中分配全局变量,它可能会造成混淆并且难以阅读.
<head>
<script>
var numberOfDucks = 1000; // Global
function some_function() {
// numberOfDucks is accessible here
alert (numberOfDucks);
// until you mask it by defining a local variable using the 'var' keyword
var myLocal = 0; // is a local
anotherGlobal = 0; // is a global
}
</script>
<script>
// potentially some other script
</script>
<script src="even_more_script.js">
</head>
Run Code Online (Sandbox Code Playgroud)
在函数中定义全局(隐含全局)并不是一个好主意,因为它会引起很多争议.
归档时间: |
|
查看次数: |
34921 次 |
最近记录: |