Javascript全局变量类型更改

Javascript全局变量类型更改,javascript,types,Javascript,Types,在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(); 我的示例只是一个简单的演示,我相信大多数Javascrip

在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=1//全局变量
  • 如果定义了(1),则在
    foo()中
  • 函数foo(){
    a、 //在这种情况下,a将是全局变量,a=1
    }
    函数foo(){
    var a;//在这种情况下,a将是私有变量,a=未定义但全局变量a不更改
    
    }

    这取决于你想做什么。使用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中”。

    动态键入可能很有用,但是关于这个主题有一个很大的争论,谢谢@DougT。供您参考。但我仍然想知道,即使我看到大多数JavaScript程序员都不会这么做,在我的例子中是否有真正或实际的用法?