ReferenceError:变量未定义

Posted

技术标签:

【中文标题】ReferenceError:变量未定义【英文标题】:ReferenceError: variable is not defined 【发布时间】:2013-07-09 03:28:02 【问题描述】:

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

我在页面中有这个脚本:

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

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

10

var value = "10";

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

嗨 McGarnagle 它解决了问题!感谢差异很大。但是有无var有什么区别 @LionLiu: 使用var,它是function 的本地声明。没有var,它是全局的。 嗨@McGarnagle,我已经在我的jquery准备函数中声明了var a = 0,并且正在使用这个变量作为参数从表单的onsubmit调用一个函数,但我仍然收到引用错误,如果该变量是全局变量,它应该作为该函数的参数,但它不起作用,我只是想知道确切的原因,如果你知道的话。感谢您的宝贵时间。 @noobcode 很难说。我建议整理一个简短的例子(或者更好的工作小提琴)来说明问题。 您应该在全局范围内的某处使用 var 关键字声明此变量,否则您将值分配给未定义的变量。这是一种不好的编码习惯,在严格模式下不起作用。【参考方案2】:

变量仅在您定义的范围内可用。如果你在函数内部定义一个变量,你将无法在它之外访问它。

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

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

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

这里可能无关紧要,但$(function() )$(document).ready(function() ) 的快捷方式,它在加载文档后立即执行一个函数。如果你想立即执行某些东西,你不需要它,否则请注意,如果你在 DOM 加载之前运行它,值将是 undefined 直到它加载,所以 console.log(value); 放置在 $(function() ) 之后将返回undefined。换句话说,它将按以下顺序执行:

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

另见:

What is the scope of variables in javascript? I've Heard Global Variables Are Bad, What Alternative Solution Should I Use?

【讨论】:

【参考方案3】:

使用以下代码得到错误(在函数 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) 版本/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 ;

【讨论】:

以上是关于ReferenceError:变量未定义的主要内容,如果未能解决你的问题,请参考以下文章

app.js:81010 [Vue 警告]:挂载钩子错误:“ReferenceError: $store 未定义”

ReferenceError:变量未定义-Node.js

什么是“ReferenceError:错误 #1065:未定义变量 qnx.display::IowWindow”?

ReferenceError:未定义“bot”(Eris)-在我的命令中

差异TypeError和ReferenceError

ReferenceError:未定义提取