以下是全球延迟的两个代码示例:
var globalVariable = 'something';
和
globalVariable = 'something';
这些解决方案之间的区别是什么,甚至还有一个?哪一个是更好的解决方案?我应该避免这些解决方案吗?如果有,为什么?
编辑:两者都是在全球范围内定义的。
答案 0 :(得分:4)
当您省略关键字var
时,它会使变量自动为全局变量,而不管它在何处定义。因此,即使它是在函数中定义的,它也随处可见
因此,第二个选项globalVariable = 'something';
使其成为全局。
如果第一个选项var globalVariable = 'something';
在全局级别定义,那么它将只是全局的。例如,如果这是在函数中定义的,那么它只对该函数可见。
除非必要,否则建议避免声明全局变量。
有关范围界定的更多信息 - http://www.w3schools.com/js/js_scope.asp
答案 1 :(得分:2)
如果你把它放在全局范围内,第一个只是一个全局声明,但是,一般来说,如果你想要一个全局变量,你应该在全局范围内明确地声明它(即使你以后只为它分配一个值) )。
第二个将始终创建一个全局变量。
那就是说,你应该避免两种选择。你几乎从不真正需要全局变量。如果有一个全局变量很有用,通常最好将脚本包装在IIFE中并将变量声明为该级别。
(function () {
var not_quite_a_global;
function foo() {
not_quite_a_global = 1;
}
}());
这会阻止它们与其他同时加载的其他脚本或模块中的同名变量冲突。