ReferenceError:未定义变量

And*_*Liu 24 javascript variables var definition

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

我在页面中有这个脚本:

$(function(){
    var value = "10";
});
Run Code Online (Sandbox Code Playgroud)

但是浏览器说"ReferenceError:value not defined".但是,如果我去浏览器控制台并输入任何一个

10
Run Code Online (Sandbox Code Playgroud)

要么

var value = "10";
Run Code Online (Sandbox Code Playgroud)

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

编辑:只需摆脱"var"即可解决问题.

McG*_*gle 33

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

$(function(){
    value = "10";
});
value; // "10"
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*ski 6

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

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

var value;
$(function() {
  value = "10";
});
console.log(value); // 10
Run Code Online (Sandbox Code Playgroud)

请注意,您不应该省略此代码中的第一行(var value;),否则您将为未定义的变量赋值.这是错误的编码实践,不会在严格模式下工作.定义一个variable(var variable;)并为变量()赋值variable = value;是两回事.您无法为尚未定义的变量赋值.

这可能与此无关,但它$(function() {})是一个快捷方式$(document).ready(function() {}),一旦加载文档就会执行一个函数.如果你想立即执行某些事情,你不需要它,否则要注意如果你在加载DOM之前运行它,那么值将undefined一直存在,直到它被加载,所以console.log(value);在它之后立即$(function() {})返回undefined.换句话说,它将按以下顺序执行:

var value;
console.log(value);
value = "10";
Run Code Online (Sandbox Code Playgroud)

也可以看看: