Javascript全局变量类型改变

Javascript global variable type change

本文关键字:改变 类型 全局变量 Javascript      更新时间:2023-09-26

在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程序员不会写它。但是,全局变量在不同函数中改变其数据类型的动态特性是否有任何实际用途?

动态类型允许你做这样的事情:

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;全局变量可以看作是窗口对象的属性。查看这里的精确度)。
所以当你写a = a + "hello";, a成为一个字符串无处不在,而不仅仅是'在foo'。

  1. var a = 1; //global variable
  2. 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 }

这取决于你想做什么。在Javascript中,如果使用大量回调,那么被操纵成不同类型的全局变量可能是危险的。回调函数触发很多(当然是异步的)和操作全局变量可能会使您最终在一个或多个回调函数中读取错误的数据,并且会出现意想不到的结果,从而偏离代码的意图。