故事与事故-计算机科学
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 。
打赏