0

作为 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>

用作:-

<input type="submit" value="Submit" onclick="compute ()">

无法得到预期的结果。我想在整个页面中使用数据,因此希望将其保持为全局以供所有功能使用。我也无法以传统方式将其设置为全局。在函数中声明变量会给出预期的结果。由于您必须意识到我是一个完全的菜鸟,所以如果有其他方法可以完成这些事情,请赐教。不知何故,我觉得必须有一个更好,更简单的方法来解决这个问题。

提前致谢。:)

PS:这里的第一个问题。原谅我的错误。

4

2 回答 2

1

var关键字在当前范围内声明一个变量。如果var在函数内部声明 a,它只会存在于函数内部。MDN 文档通常非常好。

于 2012-05-29T07:49:34.770 回答
-2

在 Javascript 中声明全局变量的一种好方法是window.globalVariableName,或者var globalVariableName;如果您没有在浏览器中运行应用程序,则用特定于该环境的全局对象替换窗口。

无论您在全局范围内还是在函数中,第一个声明都将起作用。

声明全局变量的错误方法是

globalVariableName = 'Foo';

因为它不是一个明显的声明,看起来很像只是忘记了 var。

最后 globalVariables 不是一个好用的东西。因此,请谨慎使用它们。尝试检查它们是否还没有被另一个脚本使用,这样说

if(window.globalVariableName === undefined) window.globalVariableName = 'Bar';

尝试阅读 JavaScript Patterns Stoyan Stefanov 的第一章以获得更多解释。

更新:awsering Andreas Rossberg

例如,Definitive Javascript Guide 中的 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();

取消注释“使用严格”;将在第一个日志中为此给出 undefined,但第二个日志仍为 Window。

于 2012-05-29T08:07:21.300 回答