如何在javascript中访问函数内部的变量?
我对javascript非常陌生,所以请为可能是琐碎的问题道歉如何在javascript中访问函数内部的变量?,javascript,Javascript,我对javascript非常陌生,所以请为可能是琐碎的问题道歉 var foo = function () { a = "10"; this.b = "20"; }; foo.c = "30"; console.log(foo.a); // undefined console.log(foo.c); // prints 30. var foo1 = new foo(); console.log(foo1.b) // prints 20 如何访问var“a”?有可能吗 使
var foo = function () {
a = "10";
this.b = "20";
};
foo.c = "30";
console.log(foo.a); // undefined
console.log(foo.c); // prints 30.
var foo1 = new foo();
console.log(foo1.b) // prints 20
如何访问var“a”?有可能吗 使用全局变量:
var a = 10;
var foo = function() {
a = 15;
this.b = 20;
};
console.log(a); // equals 10
foo();
console.log(a); // equals 15
如果您希望实际访问函数中的变量a
,就像您的示例一样:
var foo = function() {
a = 10; // private member
};
无法访问该私人成员
结果表明,当您以这种方式声明变量时,您已经创建了一个全局变量。您可以通过
console.log(a)访问它
并且它将返回10
。但是,如果使用var a=10代码>在函数内部,您将无法访问此成员。使用全局变量:
var a = 10;
var foo = function() {
a = 15;
this.b = 20;
};
console.log(a); // equals 10
foo();
console.log(a); // equals 15
如果您希望实际访问函数中的变量a
,就像您的示例一样:
var foo = function() {
a = 10; // private member
};
无法访问该私人成员
结果表明,当您以这种方式声明变量时,您已经创建了一个全局变量。您可以通过console.log(a)访问它
并且它将返回10
。但是,如果使用var a=10
在函数内部,您将无法访问此成员。实际上,只要您不在变量声明前面加上var
,它将是全局的:
var foo = function () {
a = "10";
this.b = "20";
};
foo();
console.log(a); // is 10
与之相比:
var foo = function () {
var a = "10"; // private scope
this.b = "20";
};
foo();
console.log(a); // is undefined
实际上,只要不在变量声明前面加上var
前缀,它将是全局的:
var foo = function () {
a = "10";
this.b = "20";
};
foo();
console.log(a); // is 10
与之相比:
var foo = function () {
var a = "10"; // private scope
this.b = "20";
};
foo();
console.log(a); // is undefined
您可以在构造函数中返回定义公共成员的对象:
function Foo() {
var a = '10';
function getA() {
return a;
}
return {
'a': a,
'b': 20,
'getA': getA
};
}
var foo = new Foo();
console.log(foo.a) // 10
console.log(foo.b); // 20
console.log(foo.getA()); // 10
您可以在构造函数中返回定义公共成员的对象:
function Foo() {
var a = '10';
function getA() {
return a;
}
return {
'a': a,
'b': 20,
'getA': getA
};
}
var foo = new Foo();
console.log(foo.a) // 10
console.log(foo.b); // 20
console.log(foo.getA()); // 10
代码
console.log(foo.a);
console.log(foo.c);
这意味着您相信a
将被设置为与foo.a=“10”
等效的值,即设置“class”foo
的静态字段。JavaScript中并非如此
a = "10";
这将全局变量a
设置为值“10”
,必要时创建全局变量槽。应该避免这种类型的全局赋值,并由JSLint之类的工具捕获
this.b = "20";
这会将作为函数的此
参数传递的对象字段设置为“20”
,必要时创建字段槽。请注意,如果直接调用foo
,例如foo()
,而不调用new
,则全局范围将作为this
传递,而this.b
也将创建一个全局变量。这种类型的错误可以通过严格模式捕获。如果在严格模式下执行,undefined
作为this
参数传入,这将引发异常
var foo1 = new foo();
这将创建一个新的空对象,其\uuuu proto\uuuu
属性设置为foo
的prototype
属性的值,然后调用foo
将新对象作为此参数传递。\uuuu proto\uuuu
的所有字段都显示为对象字段的默认值。这导致了向构造函数的prototype
对象添加方法并初始化构造函数中的字段的惯例。通过构造一个对象,将祖先原型对象作为其\uuuu proto\uuu
值,并将其分配给构造函数的functionsprototype
属性,可以模拟继承。构造函数还将调用祖先构造函数(不带new
),将其this
作为构造函数的this
参数传递(使用apply
或call
)。这一切都有点尴尬,因此ECMAScript 6将其标准化为一个类构造,大致转换为我描述的内容。代码
console.log(foo.a);
console.log(foo.c);
这意味着您相信a
将被设置为与foo.a=“10”
等效的值,即设置“class”foo
的静态字段。JavaScript中并非如此
a = "10";
这将全局变量a
设置为值“10”
,必要时创建全局变量槽。应该避免这种类型的全局赋值,并由JSLint之类的工具捕获
this.b = "20";
这会将作为函数的此
参数传递的对象字段设置为“20”
,必要时创建字段槽。请注意,如果直接调用foo
,例如foo()
,而不调用new
,则全局范围将作为this
传递,而this.b
也将创建一个全局变量。这种类型的错误可以通过严格模式捕获。如果在严格模式下执行,undefined
作为this
参数传入,这将引发异常
var foo1 = new foo();
这将创建一个新的空对象,其\uuuu proto\uuuu
属性设置为foo
的prototype
属性的值,然后调用foo
将新对象作为此参数传递。\uuuu proto\uuuu
的所有字段都显示为对象字段的默认值。这导致了向构造函数的prototype
对象添加方法并初始化构造函数中的字段的惯例。通过构造一个对象,将祖先原型对象作为其\uuuu proto\uuu
值,并将其分配给构造函数的functionsprototype
属性,可以模拟继承。构造函数还将调用祖先构造函数(不带new
),将其this
作为构造函数的this
参数传递(使用apply
或call
)。这一切都有点尴尬,所以ECMAScript 6将其标准化为一个类构造,它大致转换为我所描述的内容。您可以始终使用全局变量。@JCOC611如何访问变量“a”?有可能吗?没有。这是私有范围变量的一种形式。错误。a在t中