javascript - 函数作用域和变量进/出所述函数

标签 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 以相同的方式检查它的“值”与我想要检查的内容,所以...我只是不明白为什么它不起作用。

任何提示、链接、解释等...我很乐意感谢。

最佳答案

第一个示例中的 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 只是一个字符串;它不再是“现场”了。

关于javascript - 函数作用域和变量进/出所述函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519435/

相关文章:

javascript - 将输入转换为选项卡,使用隐藏字段

javascript - 按键后重置 lodash 去抖

javascript - 我正在尝试让一个 div 元素跟随我的鼠标(javascript),但它一直出现故障

javascript - 按钮在可拖动时不能满足编辑

javascript - jQuery .then() 调用两个函数

javascript - HTML Canvas 宽度无法调整

javascript - 在react-native功能组件中哪里实现初始化代码

javascript - 完全不懂javascript的jquery资源

javascript - 如何实现页面从中心打开/关闭的效果? (如iPad)

javascript - 为什么使用 gulp-gzip,我可以在不配置服务器的情况下提供 gzip 压缩的内容吗?