javascript中的作用域

javascript中的作用域,javascript,Javascript,我遇到了以下奇怪的代码: function foo(){ works = {hello:"world"}; function bar(){ alert('does not work'); } var notwork = {hello:"world"}; } foo(); alert(works.hello); alert(notwork.hello); 有人能给我解释一下为什么工作有效而不工作无效吗?或者给我指出一个详细解释这一点的好资源 多谢各

我遇到了以下奇怪的代码:

function foo(){
    works = {hello:"world"};
    function bar(){
        alert('does not work');
    }
    var notwork = {hello:"world"};
}
foo();
alert(works.hello);
alert(notwork.hello);
有人能给我解释一下为什么工作有效而不工作无效吗?或者给我指出一个详细解释这一点的好资源


多谢各位

var notwork创建仅对函数运行时有效的局部变量


works创建在整个javascript运行时有效的全局变量。var notwork创建仅在函数运行时有效的局部变量


works创建在整个javascript运行时有效的全局变量。

您遗漏了
var
关键字,因此正在全局对象上定义
works

你想要

var works = ...

您遗漏了
var
关键字,因此正在全局对象上定义
works

你想要

var works = ...

var
将变量声明为其在中定义的函数的“局部”

如果没有
var
,您的
工作
变量是全局变量:它可以在任何地方看到/访问/使用

使用
var
,您的
notwork
变量是
foo
函数的本地变量:无法从该函数外部查看/使用该变量


有关更多信息,请参阅的文档,其中说明(引用):

变量的范围是当前变量 函数或,对于声明的变量 在函数外部,当前 应用程序

在函数外部使用
var
是不正确的 可选;将值赋给 未声明的隐式变量 将其声明为全局变量。
但是,建议始终 使用
var
,在 在以下情况下的功能:

  • 如果变量在包含函数的范围内(包括全局 范围)具有相同的名称
  • 如果递归函数或多个函数使用具有相同名称和 希望这些变量是局部变量
未能在中声明变量 这些案件很可能导致 意外的结果


var
将变量声明为其在中定义的函数的“局部”

如果没有
var
,您的
工作
变量是全局变量:它可以在任何地方看到/访问/使用

使用
var
,您的
notwork
变量是
foo
函数的本地变量:无法从该函数外部查看/使用该变量


有关更多信息,请参阅的文档,其中说明(引用):

变量的范围是当前变量 函数或,对于声明的变量 在函数外部,当前 应用程序

在函数外部使用
var
是不正确的 可选;将值赋给 未声明的隐式变量 将其声明为全局变量。
但是,建议始终 使用
var
,在 在以下情况下的功能:

  • 如果变量在包含函数的范围内(包括全局 范围)具有相同的名称
  • 如果递归函数或多个函数使用具有相同名称和 希望这些变量是局部变量
未能在中声明变量 这些案件很可能导致 意外的结果


不。局部变量在函数执行后非常有效。这就是Javascript有闭包的原因。正如我所同意的,在本例中,变量在函数执行后无效。如果我错了,请纠正我,谢谢!不。局部变量在函数执行后非常有效。这就是Javascript有闭包的原因。正如我所同意的,在本例中,变量在函数执行后无效。如果我错了,请纠正我,谢谢!