【问题标题】:Does a function call in Javascript result in any object creation?Javascript 中的函数调用会导致任何对象的创建吗?
【发布时间】:2017-06-27 09:18:21
【问题描述】:

比方说,

function f(){}

f();

当定义函数 f() 时,会在内存中创建一个函数对象(连同它的原型对象)

函数的执行会进一步创建任何新对象吗?如果是,那是什么?

编辑:

我正在尝试理解用 Javascript 实现的模块模式

function f(){
    var name=""; 
    out = {
      getName: function(){return name;}, 
      setName: function(newName){name = newName}
    }; 
    return out;}; 

var x= f(); 

var y = f();

调用 x.setName("foo");不影响 y.getName() 的值

如果不在任何对象中,x 和 y 的变量名实际上存储在哪里?

【问题讨论】:

  • 构造函数模式的函数执行肯定会创建一个新对象。函数执行的非构造模式,即 f() 会创建任何新对象吗?
  • 使用 chrome 的分析工具应该很容易检查
  • 据我所知,在函数/例程旁边放置 () 是在声明 f 打开它之后关闭流。

标签: javascript function object


【解决方案1】:

实际上,函数定义将创建一个对象,其中包含其范围内的变量,并将该对象添加到其范围链中。 执行时,它调用其作用域链并将其添加到当前作用域(调用它的函数的作用域链,已存在)。所以不调用函数不会创建任何对象

【讨论】:

  • 我正在尝试理解在 Javascript 中实现的模块模式 .........function f(){var name=""; out = {getName: function(){return name;}, setName: function(newName){name = newName}};返回;};变量 x= f();变量 y = f(); ............. 调用 x.setName("foo");不影响 y.getName() 的值 ..... 如果不在任何对象中,实际上是为 x 和 y 存储的变量名
  • 我正在尝试理解在 Javascript function f(){ var name=""; out = {getName: function(){return name;}, setName: function(newName){name = newName}}; return out;}; var x= f(); var y = f(); Calling x.setName("foo"); 中实现的模块模式不影响 y.getName() 的值 ..... 如果不在任何对象中,实际上是为 x 和 y 存储的变量名
【解决方案2】:

您编辑的问题与第一个版本完全不同.. 在这种情况下,每次执行 f 时都会显式创建一个新对象。返回的对象每次都不一样。所以如果你这样做了

var x= f(); 

var y = f();

x 与 y 不同。

【讨论】:

  • 我很抱歉。现在我明白了,我没有问正确的问题。我会问一个新问题。感谢您的帮助
  • 没关系,不客气!如果是,则将答案标记为已解决:)
猜你喜欢
  • 1970-01-01
  • 2020-06-23
  • 2013-04-04
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多