我来自C和C ++语言,我很难理解JavaScript的一些内容:输入函数时是否在JavaScript中复制了变量(参数)?
在C / C ++中,函数的参数是重复的,并且不能在函数内进行更改(当然,您可以将指针作为参数传递,但它们不能自行更改)。在JavaScript中,它看起来像(例如使用闭包),您可以在函数内声明变量,然后使用它们。您也可以更改函数内的参数,然后保留这些修改。
如果我说JavaScript应用程序中只有一个执行上下文,我是对的吗?
答案 0 :(得分:1)
在C中你可以通过值传递一个结构,在这种情况下,它会被复制到一个函数中(如果你返回它就会被复制出来),或者你可以将一个指针传递给结构,在这种情况下它不被复制,您所做的所有更改都对调用者可见。在C ++中它是相同的,除了你也可以通过引用传递,在幕后就像传递一个指针,但编译器会隐藏它一点。
将Javascript视为通过引用传递所有结构。除非您明确复制,否则不会复制任何内容。
Javascript变量也不包含变量中的对象,它们只包含对象的引用。所以在C / C ++术语中,所有对象都是基于堆的,没有存储在堆栈中。
对于简单类型(例如数字),可能会有副本,但是您可以告诉它并不重要。字符串可能通过引用传递,但由于您无法修改现有字符串,因此无法告诉它。
我说可能是因为它的调用语义很重要,不同的Javascript运行时可以选择以不同的方式实现,只要你不能区分它们。