首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用函数属性是合法的javascript (ECMAScript)吗?

引用函数属性是合法的javascript (ECMAScript)吗?
EN

Stack Overflow用户
提问于 2015-06-26 16:29:08
回答 4查看 50关注 0票数 2

引用函数属性是合法的javascript (ECMAScript-5)吗?

代码语言:javascript
复制
var baz = function(callback) {
  return callback();
};

var foo = function() {
  return foo.bar;
}

foo.bar = 1;

foo(); // 1?

baz(foo);  // 1?

编辑:你能让我参考ECMA规范中宣称这是合法的部分吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-26 16:33:01

是。

在使用对象时,人们经常会遇到这样的问题,对象在初始化时进行评估,并且在尝试引用它们的属性时不存在。这不是函数的问题,因为直到稍后调用该函数时才会访问该属性。

例如:

代码语言:javascript
复制
let foo = {
  bar: 1,
  baz: foo.bar + 1
};

失败,因为对象尚未分配给foo,因此foo.bar未定义。

对于函数,这不是问题,因为foo是对函数的引用,在调用函数之前不会访问bar

代码语言:javascript
复制
function foo() {
  return foo.bar + 1;
}

foo.bar = 1;
票数 2
EN

Stack Overflow用户

发布于 2015-06-26 16:30:29

是的,函数是一个对象,对象具有属性,它们可以访问它们的属性。

请记住,在JS函数中,它们是一流的公民,它们可以拥有自己的属性。还请记住,属性计算是在调用函数时发生的,而不是在创建函数时发生的,因此以后可以添加属性。

你可以在这里看到:

代码语言:javascript
复制
var foo = function() {
  return foo.bar;
}

foo.bar = 1;

alert(foo()); // 1?

票数 2
EN

Stack Overflow用户

发布于 2015-06-26 16:42:28

您可以使用更好的模式,如:

代码语言:javascript
复制
var baz = function() {
  var myVal = 0;
  return function() {
    //body
  }
}()

这样,在闭包中有一个备注变量,它将为您保留值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31077981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档