为什么我不能访问函数内的变量?

时间:2015-01-15 05:06:21

标签: javascript

如果函数是javascript中的对象,为什么我不能访问函数作用域定义的变量?

我在代码中理解:

// variable test assigned an anonymous function
var test = function(){
    var x = 5;
};
console.log(test.x); // undefined

// Even when the function is explicitly named:
function test(){
    var x = 5;
}
console.log(test.x); // undefined

我不需要让这项工作或任何事情;我只需要理解为什么函数是这样的。

感谢。

6 个答案:

答案 0 :(得分:1)

这是实现目标的一种方法:

function test() {
    this.x = 5;
}

var foo = new test();
console.log(foo.x);

使用var x而不是this.x只声明一个局部变量

答案 1 :(得分:0)

var someName = function(){var x ...} /// only has local scope.

What is the scope of variables in JavaScript?

我会比我更好地描述它。好奇和有动力的好工作。

答案 2 :(得分:0)

函数是对象,但这并不意味着函数内声明的任何变量都成为该函数对象的属性。事实上,这将是非常糟糕的,因为你不能多次运行一个函数(因为第二次,变量将以不同的值开始)。

您可以将属性分配给函数对象,如下所示:

var test = function () {};
test.x = 5

答案 3 :(得分:0)

该变量仅在函数中可见,并且只能在函数内访问它,您可以使用全局变量,然后编辑它函数。

答案 4 :(得分:0)

您已创建局部变量。局部变量只能在函数内访问。

尝试了解Local&全局JavaScript变量

本地JavaScript变量

在JavaScript函数中声明的变量,变为函数的LOCAL。

局部变量具有局部范围:它们只能在函数内访问。

function myFunction() {

    var name = "roy";

    // code here can use name

}

全局JavaScript变量

在函数外声明的变量变为GLOBAL。

全局变量具有全局范围:网页上的所有脚本和函数都可以访问它。

var name = "roy";

// code here can use name

function myFunction() {

    // code here can use name

}

答案 5 :(得分:0)

我相信这是因为这些变量只存在于您定义的函数范围内。超出该功能的范围,它们不存在。

它们相当于面向对象语言类中的私有成员。

或者你可以

function test() {
  this.x = 5;
}

var testInstance = new test();

console.log(test.x);