功能范围&变量输入/输出所述函数

时间:2012-03-01 15:56:35

标签: javascript

所以即时学习,只是尝试一下,好的,问题是这个

我知道函数外部定义的变量可用于所有函数,而函数中的一个集合不是。

当我这样做的时候说

HTML

<input type="text" name="field" id="field"/>

<input type="submit" id="submit" name="submit"/>

JS

var results = document.getElementById("field").value;
var submitBtn = document.getElementById("submit");

function pushit(){
    aNames.push(results);
    for(i=0; i<aNames.length; i++){
        document.write(aNames[i] + "<br/>");
    }

    submitBtn.onclick = pushit;
}

它不起作用。当提交被点击时,它只显示原始数组项。

但是当我将功能更改为:

function pushit(){
    var results = document.getElementById("field").value;
    aNames.push(results);
    for(i=0; i<aNames.length; i++){
         document.write(aNames[i] + "<br/>");
    }
}

基本上只是将var结果放在它工作的函数中。我的?是为什么?

如果我要说,例如,在表单中检查表单中字段的特定值,以同样的方式检查id,因为它的“值”与我想检查的内容如此...我只是不明白为什么它不起作用。

任何提示,链接,解释等......我很高兴欣赏。

1 个答案:

答案 0 :(得分:3)

第一个示例中的results变量在页面加载时设置,并且永远不会更改。每次阅读时,它都是相同的值。

在第二个示例中,每次运行事件时都会从输入中获取值;你正在制作一个新变量。因此,您将看到新值。

JavaScript DOM元素是“实时”变量,但字符串不是。

例如:

var results = document.getElementById("field");
var submitBtn = document.getElementById("submit");

function pushit(){
    alert(results.results);
}

这适用于results是“实时”变量。当您访问它时,它始终是最新的DOM元素。

执行var results = document.getElementById("field").value;时,现在results只是一个字符串;它不再“活着”了。