小编lam*_*kie的帖子

如果函数是对象,函数体去哪里了?

如果函数是对象,函数体去哪里了?

让我澄清一下我的困惑。函数是对象,好吧。我可以将对象视为由字符串键和任意类型的值组成的哈希映射。我可以做这个:

function Square(size) {
    Rectangle.call(this, size, size);
}
Square.prototype = new Rectangle();
Run Code Online (Sandbox Code Playgroud)

我只是把它Square当作一个普通对象对待,并prototype通过为它分配一个新值来弄乱它的属性。但是,如果函数只是对象(或与此相关的哈希映射),那么函数的主体(在此示例中Rectangle.call(this, size, size);)存储在哪里?

我认为它必须存储为某些属性的值,可能如下所示:

console.log(Square.executableBody); // "Rectangle.call(this, size, size);"
Run Code Online (Sandbox Code Playgroud)

显然,情况并非如此。有趣的是,在阅读 Nicholas C. Zakas 的“面向对象的 JavaScript 原理”时,我偶然发现了这一点:

[...] 函数实际上是 JavaScript 中的对象。函数的定义特征——它与任何其他对象的区别——是存在一个名为 [[Call]] 的内部属性。内部属性无法通过代码访问 [...] [[Call]] 属性是函数独有的,表示可以执行对象。

这可能是我在上面寻找的属性。不过,它没有详细说明。函数的主体是否实际存储在[[Call]]属性中?如果是这样,执行如何工作?不幸的是我无法找到更多关于[[Call]],谷歌主要想出了关于函数call方法的信息......

一些澄清将不胜感激!:)

javascript

4
推荐指数
1
解决办法
102
查看次数

面向连接与电路交换,无连接与分组交换

正如标题所暗示的那样,我无法看到我大学网络课程中不断提到的以下概念之间的区别:

  • 面向连接的服务和(虚拟)电路交换有什么区别?
  • 无连接服务和数据包交换有什么区别?

我觉得各个术语都在不断地使用相同的类比来解释。由于我无法在网上找到明确的答案,我认为在这里提及这一点可能是个好主意。

谢谢!

networking network-programming

4
推荐指数
2
解决办法
4797
查看次数

汇编中的宏(IA32,AT&T语法)

我目前正在尝试理解汇编语言的概念.我大学的幻灯片说明如下:

# How to define a macro:
.macro write string
    movl string, %esi
    call printstr
.endm

# How to use a macro:
write aString
Run Code Online (Sandbox Code Playgroud)

但是,这对我不起作用.我正在使用gcc编译我的代码.

.data
    msg:    .string "The result is %d.\n"

.text
.global main

.macro add_3 n
    movl n, %eax
    addl $3, %eax
.endm

main:
    add_3 $39
    pushl %eax
    pushl $msg
    call printf
    popl %eax
    popl %eax
    movl $1, %eax
    int $0x80
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到以下错误:

undefined reference to `n'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

x86 assembly gcc gnu-assembler

3
推荐指数
1
解决办法
3305
查看次数

此函数希望从std :: istream解析什么输入格式?

我沿用了《Example》中的C ++ 17一书,该书通过展示一系列迷你项目介绍了C ++ 17,这很酷。

但是,在第2章中,在a Set之上实现a的LinkedList是以下代码:

void Set::read(std::istream& inStream) {
  int size;
  inStream >> size;

  int count = 0;
  while (count < size) {
    double value;
    inStream >> value;
    insert(value);
    ++count;
  }
}
Run Code Online (Sandbox Code Playgroud)
void Set::write(std::ostream& outStream) {
  outStream << "{";

  bool firstValue = true;
  Iterator iterator = first();

  while (iterator.hasNext()) {
    outStream << (firstValue ? "" : ", ") << iterator.getValue();
    firstValue = false;
    iterator.next();
  }

  outStream << "}";
}
Run Code Online (Sandbox Code Playgroud)
int main() …
Run Code Online (Sandbox Code Playgroud)

c++ c++17

2
推荐指数
1
解决办法
64
查看次数

JavaScript条件执行和变量范围

我提前道歉,之前可能已经在StackOverflow上讨论了,我只是不知道这叫什么,所以我找不到满意的答案.

但是,我正在学习JavaScript和一本名为"Eloquent JavaScript"的书.在那里,我找到了以下代码,它反复提示用户输入他的名字,直到他这样做.

while (!input) {
    var input = prompt("Who are you?");
}
Run Code Online (Sandbox Code Playgroud)

我根本不明白为什么这实际上有效而不是引发错误.在评估条件表达式时,没有称为输入的变量.如果我理解正确,则无法进行评估,这通常会阻止进一步执行.在while循环体,它的声明,然后创建一个名为变量输入,仍在执行,但.

然而,这让我很焦虑,所以我尝试了这个:

while (!bool) {
    console.log("Hi");
    var bool = true;
}
Run Code Online (Sandbox Code Playgroud)

这甚至更奇怪.当涉及条件表达式时,它也是同样的问题:在评估条件之后,在循环体的范围内创建bool.其次,bool经常设置为true,但代码仍然执行一次,换句话说,Hi正在打印一次.

我很困惑,希望得到一些帮助.;)

javascript scope conditional-statements

1
推荐指数
1
解决办法
273
查看次数