作为JavaScript初学者,我在尝试使用多个函数时无法使用全局变量。代码如下 -
<script type="text/javascript">
/* Global Variable example! Not working as one function called onClick. */
function make_name_variable () { var y_name = document.getElementById('y_name').value; }
function make_date_variable () { var y_date = document.getElementById('y_date').value; }
function make_month_variable () { var y_month = document.getElementById('y_month').value; }
function make_year_variable () { var y_year = document.getElementById('y_year').value; }
function test(){
/*var y_name = document.getElementById('y_name').value;
var y_date = document.getElementById('y_date').value;
var y_month = document.getElementById('y_month').value;
var y_year = document.getElementById('y_year').value;*/
document.getElementById('Result').innerHTML = y_date + y_month + y_year;
return true;
}
function compute () {
make_name_variable ();
make_date_variable ();
make_month_variable ();
make_year_variable ();
test();
}
</script>
使用as: -
<input type="submit" value="Submit" onclick="compute ()">
无法按预期获得结果。我希望在整个页面中使用数据,因此希望将其保持为全局所有要使用的函数。我也无法以传统方式将其设置为全局。在函数内声明变量可以得到所需的结果。 因为你必须意识到我是一个完整的菜鸟,所以如果有其他方法可以完成任务,请启发我。不知何故,我觉得必须有一种更好,更简单的方法来解决这个问题。
提前致谢。 :)
P.S:第一个问题在这里。请原谅我的错误。
答案 0 :(得分:1)
var
关键字声明当前范围内的变量。如果在函数内声明var
,它将只存在于那里。 The MDN docs通常非常好。
答案 1 :(得分:-2)
在Javascript中声明全局变量的好方法是window.globalVariableName
而不是var globalVariableName;
或者如果您没有在浏览器替换窗口中运行您的应用程序,该窗口具有特定于该环境的全局对象。
无论您处于全局范围或函数中,第一个声明都将起作用。
声明全局变量的BAD方法是
globalVariableName = 'Foo';
因为它不是一个明显的声明,看起来很像忘记var。
最后globalVariables不是一件好事。所以要仔细地使用它们。尝试检查它们是否已被其他脚本使用,如此
if(window.globalVariableName === undefined) window.globalVariableName = 'Bar';
尝试阅读第一章 JavaScript模式 斯托扬斯特凡诺夫 有关更多解释。
更新:安德烈亚斯·罗斯伯格(Andreas Rossberg)
例如,“权威Javascript指南”中的David Flanigan在4.6.1中说明什么是全局变量,它们是全局对象的属性。您也可以在MDN上确认这一点。
关于不好的风格,我可以同意但只是部分,因为如果你不使用 Single var Pattern 来进行这样的变量声明
(function(){
var someVar1 = '',
someVar2 = null,
someVar3 = undefined;
})();
你的代码看起来一样糟糕。
至于下一版本的EcmaScript,你的参考资料有点过于简短。我只读过this
将在严格的Javascript中以不同的方式处理。如果我理解正确,那么这个例子就是你所指的
function someFunction()
{
//'use strict';
console.log(this); //Window or undefined
console.log(window);// Window or Window
}
someFunction();
取消注释'use strict';将在第一个日志中为此提供未定义,但仍为第二个日志的窗口。