参考错误:未定义变量

IT技术 javascript variables definition var
2021-03-13 01:01:42

我有时会遇到这个问题,但仍然不知道是什么原因造成的。

我在页面中有这个脚本:

$(function(){
    var value = "10";
});

但浏览器显示“ReferenceError: value is not defined”。但是,如果我转到浏览器控制台并输入

10

或者

var value = "10";

它们中的任何一个都可以返回 10。我的脚本有什么问题?

3个回答

它在闭包内声明,这意味着它只能在那里访问。如果你想要一个全局可访问的变量,你可以删除var

$(function(){
    value = "10";
});
value; // "10"

这相当于写window.value = "10";.

嗨@McGarnagle,我已经在我的 jquery 就绪函数中声明了 var a = 0,并从表单的 onsubmit 中调用了一个将此变量作为参数的函数,但我仍然收到引用错误,如果变量是全局的,它应该有用作该函数的参数,但它不起作用,我只是想知道确切原因,以防万一。感谢您的时间。
2021-04-21 01:01:42
您应该var在全局范围内的某处使用关键字声明此变量,否则您将为未定义的变量赋值。这是不好的编码习惯,在严格模式下不起作用。
2021-04-23 01:01:42
@LionLiu:使用var,它是function其声明输入的本地。没有var,它是全局的。
2021-04-25 01:01:42
@noobcode 很难说。我建议把一个简短的例子(或者更好的工作小提琴)放在一起来说明这个问题。
2021-04-25 01:01:42
嗨 McGarnagle 它解决了这个问题!谢谢差别很大。但是有无 var 有什么区别
2021-05-13 01:01:42

变量仅在您定义它们的范围内可用。如果在函数内部定义变量,则无法在函数外部访问它。

var在函数外部(当然在它之前)定义变量,然后10在函数内部分配给它:

var value;
$(function() {
  value = "10";
});
console.log(value); // 10

请注意,您不应省略此代码中的第一行 ( var value;),否则您将给未定义的变量赋值。这是不好的编码习惯,在严格模式下不起作用。定义变量 ( var variable;) 和为变量赋值 ( variable = value;) 是两件事。您不能为尚未定义的变量赋值。

它在这里可能无关紧要,但它$(function() {})是 的快捷方式$(document).ready(function() {}),它在加载文档后立即执行函数。如果您想立即执行某些内容,则不需要它,否则请注意,如果您在 DOM 加载之前运行它,则 value 将为undefined直到它加载console.log(value);完毕,因此放在之后$(function() {})将 return undefined换句话说,它将按以下顺序执行:

var value;
console.log(value);
value = "10";

也可以看看:

使用以下代码得到错误(在函数 init 中);

"use strict" ;

var hdr ;

function init(){ // called on load
    hdr = document.getElementById("hdr");
}

...在三星galaxy Fame上使用股票浏览器(垃圾手机使其成为一个很好的测试者) - userAgent; Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-S6810P Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

相同的代码适用于我尝试过的其他任何地方,包括旧 HTC 手机上的股票浏览器 - userAgent ;Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

解决这个问题的方法是改变

var hdr ;

var hdr = null ;