在Javascript中,我可以在不同的函数范围内为不同的数据类型分配一个全局变量。例如:
var a = 1;
function foo(){
a = a + 10; //a is number in foo
}
function bar(){
a = a + "hello"; //a is string in bar
foo(); //a is string in foo now
}
foo();
bar();
我的例子只是一个简单的演示,我相信大多数Javascript程序员都不会写它。但是,这种动态特性是否有任何实际用法,全局变量在不同的函数中改变其数据类型?
答案 0 :(得分:1)
动态类型允许您执行以下操作:
var a = false;
if(need to show msg 1){a="message 1"};
if(need to show msg 2){a="message 2"};
if(a){display(a);}
示例不是很好,但想法是您可以使用相同的变量作为条件和内容,或者作为数组元素使用,如果您要查找的内容不在数组中,则可以使用错误消息。 ..
顺便说一句,当你写a = 1
时,它实际上等同于window.a = 1
;全局变量可以被视为窗口对象的属性(。see here for precisions)。
所以当你写a = a + "hello";
时,a会变成一个字符串,而不仅仅是foo'。
答案 1 :(得分:0)
var a = 1; //global variable
foo()
中定义了(1) function foo(){
a; //In this case a will be global variable and a = 1
}
function foo(){
var a; //In this case a will be private variable, a = undefined but global varibale a not change
}
答案 2 :(得分:0)
这取决于你想要做什么。使用Javascript,如果您使用大量回调,则操作为不同类型的全局变量可能会很危险。回调函数触发很多(当然是异步)并操纵一个全局变量可以使你最终在一个或多个回调函数中读取错误的数据,并且意外的结果将偏离你的代码的意图。