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";
.
变量仅在您定义的范围内可用.如果在函数内定义变量,则无法在其外部访问它.
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)
也可以看看: