引用函数属性是合法的javascript (ECMAScript-5)吗?
var baz = function(callback) {
return callback();
};
var foo = function() {
return foo.bar;
}
foo.bar = 1;
foo(); // 1?
baz(foo); // 1?编辑:你能让我参考ECMA规范中宣称这是合法的部分吗?
发布于 2015-06-26 16:33:01
是。
在使用对象时,人们经常会遇到这样的问题,对象在初始化时进行评估,并且在尝试引用它们的属性时不存在。这不是函数的问题,因为直到稍后调用该函数时才会访问该属性。
例如:
let foo = {
bar: 1,
baz: foo.bar + 1
};失败,因为对象尚未分配给foo,因此foo.bar未定义。
对于函数,这不是问题,因为foo是对函数的引用,在调用函数之前不会访问bar。
function foo() {
return foo.bar + 1;
}
foo.bar = 1;发布于 2015-06-26 16:30:29
是的,函数是一个对象,对象具有属性,它们可以访问它们的属性。
请记住,在JS函数中,它们是一流的公民,它们可以拥有自己的属性。还请记住,属性计算是在调用函数时发生的,而不是在创建函数时发生的,因此以后可以添加属性。
你可以在这里看到:
var foo = function() {
return foo.bar;
}
foo.bar = 1;
alert(foo()); // 1?
发布于 2015-06-26 16:42:28
您可以使用更好的模式,如:
var baz = function() {
var myVal = 0;
return function() {
//body
}
}()这样,在闭包中有一个备注变量,它将为您保留值。
https://stackoverflow.com/questions/31077981
复制相似问题