故事与事故-计算机科学

    Programming Language

Javascript 的设计错误

下面这个示例代码中,变量 x 和 y 由于只在函数体中可见,所以在函数外部对其求值时会显示错误。

function f(x) {return x * x;}

function g(x) { var y = 2; return x * y;}

f(3);  // 输出 9

x;     // 输出 "Can't find variable: x"

g(3);  // 输出 6

y;     // 输出 "Can't find variable: y"

稍微更改一下 g(x) ,去掉函数体中的关键字 var 。在调用一次 g(x) 之后,函数外部就能看到 y 的值了。

function g(x) { y = 2; return x * y;}

g(3);  // 输出 6

y;     // 输出 2

这便是 Javascript 语言的设计错误之一:写了 var,这个变量就只在函数内部可见。否则直接写 y = …,它就是“全局可见”。这样的代码会有隐患,会在今后引起程序内部值的错误(例如若有个外部定义的变量和某个函数里的变量重名,程序运行起来就容易发生逻辑错误,因为函数里的定义覆盖了外部的定义)。

解决方案:写 Javascript 的时候应该主动忘记没有 var 关键词的写法,在所有变量声明语句里都写上 var


打赏